mirror of
https://github.com/JonasKruckenberg/tauri-build.git
synced 2025-08-14 12:55:07 +00:00
252 lines
7.5 KiB
Markdown
252 lines
7.5 KiB
Markdown
# tauri-build
|
|
|
|
A composable action to build your Tauri project.
|
|
|
|
## Usage
|
|
|
|
As opposed to the offical [tauri-action](https://github.com/tauri-apps/tauri-action) this action is as minimal as possible.
|
|
Instead of creating a GitHub release and uploading artifacts all-in-one, it provides outputs to conveniently compose together with other actions such as `actions/upload-artifact`, `actions/download-artifact` or `softprops/action-gh-release`.
|
|
|
|
This action needs both Node.JS and Cargo to be already setup.
|
|
|
|
### Minimal
|
|
|
|
The following example workflow builds artifacts on all 3 supported platforms (Window, macOS and Linux).
|
|
|
|
```yaml
|
|
name: 'publish'
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- release
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
build-binaries:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
platform: [macos-latest, ubuntu-latest, windows-latest]
|
|
|
|
runs-on: ${{ matrix.platform }}
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
|
|
- name: setup node
|
|
uses: actions/setup-node@v1
|
|
with:
|
|
node-version: 20
|
|
|
|
- name: install Rust stable
|
|
uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: stable
|
|
|
|
- name: install dependencies (ubuntu only)
|
|
if: matrix.platform == 'ubuntu-latest'
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y libgtk-3-dev webkit2gtk-4.0 libappindicator3-dev librsvg2-dev patchelf
|
|
|
|
- uses: JonasKruckenberg/tauri-build@v1
|
|
id: tauri_build
|
|
|
|
# You can now use the JSON array of artifacts under `steps.tauri_build.outputs.artifacts` to post-process/upload your bundles
|
|
```
|
|
|
|
### Bundling the app and creating a release
|
|
|
|
Chances are you want to do *something* with the artifacts that you produced. The following action will produce artifacts for Windows, macOS and Linux upload them as workflow artifacts, so that a final job (called `publish`) can create a GitHub release and attach all prouced artifacts to it. This would also be the place where you could upload artifacts to an AWS Bucket or similar.
|
|
|
|
```yaml
|
|
name: 'publish'
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- release
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
build-binaries:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
platform: [macos-latest, ubuntu-latest, windows-latest]
|
|
|
|
runs-on: ${{ matrix.platform }}
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
|
|
- name: setup node
|
|
uses: actions/setup-node@v1
|
|
with:
|
|
node-version: 20
|
|
|
|
- name: install Rust stable
|
|
uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: stable
|
|
|
|
- name: install dependencies (ubuntu only)
|
|
if: matrix.platform == 'ubuntu-latest'
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y libgtk-3-dev webkit2gtk-4.0 libappindicator3-dev librsvg2-dev patchelf
|
|
|
|
- uses: JonasKruckenberg/tauri-build@v1
|
|
id: tauri_build
|
|
|
|
# The `artifacts` output can now be used by a different action to upload the artifacts
|
|
- uses: actions/upload-artifact@v3
|
|
with:
|
|
name: artifacts
|
|
path: "${{ join(fromJSON(steps.tauri_build.outputs.artifacts), '\n') }}"
|
|
|
|
publish:
|
|
needs: build-binaries
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
# Download the previously uploaded artifacts
|
|
- uses: actions/download-artifact@v3
|
|
id: download
|
|
with:
|
|
name: artifacts
|
|
path: artifacts
|
|
# And create a release with the artifacts attached
|
|
- name: 'create release'
|
|
uses: softprops/action-gh-release@master
|
|
env:
|
|
GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
|
|
with:
|
|
draft: false
|
|
files: ./artifacts/**/*
|
|
```
|
|
|
|
### Building for Apple Silicon
|
|
|
|
This example workflow will run produce binaries for Apple Silicon (aarch64) as well as the previously shown 3 platforms. This leverages the build matrix. This can be expanded to produce binaries for other target combinations too.
|
|
|
|
```yaml
|
|
name: 'publish'
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- release
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
build-binaries:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
platform:
|
|
- os: ubuntu-latest
|
|
rust_target: x86_64-unknown-linux-gnu
|
|
- os: macos-latest
|
|
rust_target: x86_64-apple-darwin
|
|
- os: macos-latest
|
|
rust_target: aarch64-apple-darwin
|
|
- os: windows-latest
|
|
rust_target: x86_64-pc-windows-msvc
|
|
|
|
runs-on: ${{ matrix.platform.os }}
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
|
|
- name: setup node
|
|
uses: actions/setup-node@v3
|
|
with:
|
|
node-version: 20
|
|
|
|
- name: 'Setup Rust'
|
|
uses: actions-rs/toolchain@v1
|
|
with:
|
|
default: true
|
|
override: true
|
|
profile: minimal
|
|
toolchain: stable
|
|
target: ${{ matrix.platform.rust_target }}
|
|
|
|
- uses: Swatinem/rust-cache@v2
|
|
|
|
- name: install dependencies (ubuntu only)
|
|
if: matrix.platform.os == 'ubuntu-latest'
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y libgtk-3-dev webkit2gtk-4.0 libappindicator3-dev librsvg2-dev patchelf
|
|
|
|
- uses: JonasKruckenberg/tauri-build@v1.2.2
|
|
id: tauri_build
|
|
with:
|
|
target: ${{ matrix.platform.rust_target }}
|
|
|
|
# The artifacts output can now be used to upload the artifacts
|
|
- uses: actions/upload-artifact@v3
|
|
with:
|
|
name: artifacts
|
|
path: "${{ join(fromJSON(steps.tauri_build.outputs.artifacts), '\n') }}"
|
|
|
|
publish:
|
|
needs: build-binaries
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
# Download the previously uploaded artifacts
|
|
- uses: actions/download-artifact@v3
|
|
id: download
|
|
with:
|
|
name: artifacts
|
|
path: artifacts
|
|
# And create a release with the artifacts attached
|
|
- name: 'create release'
|
|
uses: softprops/action-gh-release@master
|
|
env:
|
|
GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
|
|
with:
|
|
draft: false
|
|
files: ./artifacts/**/*
|
|
```
|
|
|
|
## Inputs
|
|
|
|
| Name | Type | Description | Default |
|
|
| ------------- | ------- | ----------------------------------------------------------- | ----------------- |
|
|
| `runner` | String | Binary to use to build the application | |
|
|
| `args` | String | Additional arguments for the build command | |
|
|
| `projectPath` | String | Path to the root of the Tauri project | . |
|
|
| `configPath` | String | Path to the tauri.conf.json file, relative to `projectPath` | `tauri.conf.json` |
|
|
| `target` | String | Rust target triple to build against | |
|
|
| `debug` | Boolean | Wether to build _debug_ or _release_ binaries | false |
|
|
|
|
## Outputs
|
|
|
|
| Name | Type | Description |
|
|
| ----------- | ------ | ---------------------------------------------------------- |
|
|
| `artifacts` | String | JSON array of artifact paths produced by the build command |
|
|
|
|
## Permissions
|
|
|
|
This Action requires the following permissions on the GitHub integration token:
|
|
|
|
```yaml
|
|
permissions:
|
|
contents: write
|
|
```
|
|
|
|
## License
|
|
|
|
[MIT © Jonas Kruckenberg](./LICENSE)
|