Skip to content

Build Tauri Clients #100

Build Tauri Clients

Build Tauri Clients #100

name: Build Tauri Clients
on:
release:
types: [published]
workflow_dispatch:
inputs:
version:
description: "Manual override version tag (optional)"
required: false
jobs:
compile:
name: Compile
strategy:
matrix:
os:
- ubuntu-latest
- ubuntu-arm64
- macOS-latest
- macOS-13
- windows-latest
include:
- os: ubuntu-arm64
runs-on:
- runs-on=${{ github.run_id }}
- runner=4cpu-linux-arm64
runs-on: ${{ matrix.runs-on || matrix.os }}
env:
DEPENDS_SETUP: ${{ startsWith(matrix.os, 'ubuntu-') && 'true' || 'false' }}
steps:
- name: Set Image Tag (Unix)
if: matrix.os != 'windows-latest'
run: echo "IMAGE_TAG=${{ github.event.release.tag_name || github.event.inputs.version || 'latest' }}" >> $GITHUB_ENV
- name: Set Image Tag (Windows)
if: matrix.os == 'windows-latest'
run: echo "IMAGE_TAG=${{ github.event.release.tag_name || github.event.inputs.version || 'latest' }}" >> $Env:GITHUB_ENV
shell: pwsh
- name: Set environment variables
run: |
if [ "${{ matrix.os }}" = "ubuntu-latest" ]; then
echo "ARTIFACT_NAME1=Pinepods_${{ env.IMAGE_TAG }}_amd64.deb" >> $GITHUB_ENV
echo "ARTIFACT_NAME2=Pinepods_${{ env.IMAGE_TAG }}_amd64.AppImage" >> $GITHUB_ENV
echo "ARTIFACT_NAME3=Pinepods-${{ env.IMAGE_TAG }}-1.x86_64.rpm" >> $GITHUB_ENV
elif [ "${{ matrix.os }}" = "ubuntu-arm64" ]; then
echo "ARTIFACT_NAME1=Pinepods_${{ env.IMAGE_TAG }}_arm64.deb" >> $GITHUB_ENV
echo "ARTIFACT_NAME2=Pinepods_${{ env.IMAGE_TAG }}_aarch64.AppImage" >> $GITHUB_ENV
echo "ARTIFACT_NAME3=Pinepods-${{ env.IMAGE_TAG }}-1.aarch64.rpm" >> $GITHUB_ENV
# ... rest of conditions ...
elif [ "${{ matrix.os }}" = "windows-latest" ]; then
echo "ARTIFACT_NAME1=Pinepods_${{ env.IMAGE_TAG }}_x64-setup.exe" >> $Env:GITHUB_ENV
echo "ARTIFACT_NAME2=Pinepods_${{ env.IMAGE_TAG }}_x64_en-US.msi" >> $Env:GITHUB_ENV
elif [ "${{ matrix.os }}" = "macOS-latest" ]; then
echo "ARTIFACT_NAME1=Pinepods_${{ env.IMAGE_TAG }}_aarch64.dmg" >> $GITHUB_ENV
echo "ARTIFACT_NAME2=Pinepods.app" >> $GITHUB_ENV
elif [ "${{ matrix.os }}" = "macOS-13" ]; then
echo "ARTIFACT_NAME1=Pinepods_${{ env.IMAGE_TAG }}_x64.dmg" >> $GITHUB_ENV
echo "ARTIFACT_NAME2=Pinepods.app" >> $GITHUB_ENV
fi
shell: bash
if: ${{ matrix.os != 'windows-latest' }}
- name: Set environment variables (Windows)
run: |
echo "ARTIFACT_NAME1=Pinepods_${{ env.IMAGE_TAG }}_x64-setup.exe" >> $Env:GITHUB_ENV
echo "ARTIFACT_NAME2=Pinepods_${{ env.IMAGE_TAG }}_x64_en-US.msi" >> $Env:GITHUB_ENV
shell: pwsh
if: ${{ matrix.os == 'windows-latest' }}
- name: Setup | Checkout
uses: actions/checkout@v3
- uses: hecrj/setup-rust-action@v2
with:
rust-version: 1.81
targets: wasm32-unknown-unknown
# Install cargo-binstall for macOS runners using direct download
- name: Install cargo-binstall on macOS
if: matrix.os == 'macos-latest'
run: |
export GITHUB_TOKEN=${{ secrets.RELEASE_TOKEN }}
curl -L https://github.com/cargo-bins/cargo-binstall/releases/download/v1.9.0/cargo-binstall-universal-apple-darwin.zip -o cargo-binstall.zip
unzip cargo-binstall.zip
./cargo-binstall -y --force cargo-binstall
# Install cargo-binstall for other OSes using the standard method
- name: Install cargo-binstall
if: matrix.os != 'macos-latest'
uses: cargo-bins/cargo-binstall@main
- name: Depends install
if: ${{ env.DEPENDS_SETUP == 'true' }}
run: |
sudo apt update
sudo apt install -qy libgtk-3-dev
sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf
- name: wasm-addition
run: |
rustup target add wasm32-unknown-unknown
- name: Install Trunk
run: |
cargo binstall trunk -y
- name: Install Tauri
run: |
cargo install [email protected] --locked
- name: Update Tauri version (UNIX)
run: |
cd web/src-tauri
# Use different sed syntax for macOS
if [[ "$OSTYPE" == "darwin"* ]]; then
sed -i '' "s/\"version\": \".*\"/\"version\": \"${IMAGE_TAG}\"/" tauri.conf.json
else
sed -i "s/\"version\": \".*\"/\"version\": \"${IMAGE_TAG}\"/" tauri.conf.json
fi
cat tauri.conf.json
shell: bash
if: ${{ matrix.os != 'windows-latest' }}
- name: Setup Python
if: ${{ matrix.os == 'windows-latest' }}
uses: actions/setup-python@v2
with:
python-version: "3.x"
- name: Verify directory and update Tauri version (Windows)
if: ${{ matrix.os == 'windows-latest' }}
run: |
cd web/src-tauri
dir
python .\change-version.py tauri.conf.json ${{ env.IMAGE_TAG }}
Get-Content tauri.conf.json
shell: pwsh
- name: Build | Compile (UNIX)
run: |
cd web/src-tauri
cat tauri.conf.json
export RUSTFLAGS="--cfg=web_sys_unstable_apis"
cargo tauri build
pwd
ls
ls -la target/release/bundle
shell: bash
if: ${{ matrix.os != 'windows-latest' }}
- name: Build | Compile (Windows)
run: |
cd web/src-tauri
Get-Content tauri.conf.json
$env:RUSTFLAGS="--cfg=web_sys_unstable_apis"
cargo tauri build
ls target/release/bundle
shell: pwsh
if: ${{ matrix.os == 'windows-latest' }}
- name: Archive build 1 (Ubuntu)
uses: actions/upload-artifact@v3
with:
name: ${{ matrix.os }}-build
path: ./web/src-tauri/target/release/bundle/deb/${{ env.ARTIFACT_NAME1 }}
if: ${{ matrix.os == 'ubuntu-latest' }}
- name: Archive build 2 (Ubuntu)
uses: actions/upload-artifact@v3
with:
name: ${{ matrix.os }}-build
path: ./web/src-tauri/target/release/bundle/appimage/${{ env.ARTIFACT_NAME2 }}
if: ${{ matrix.os == 'ubuntu-latest' }}
- name: Archive build 3 (Ubuntu)
uses: actions/upload-artifact@v3
with:
name: ${{ matrix.os }}-build
path: ./web/src-tauri/target/release/bundle/rpm/${{ env.ARTIFACT_NAME3 }}
if: ${{ matrix.os == 'ubuntu-latest' }}
- name: Archive build 1 (Ubuntu ARM)
uses: actions/upload-artifact@v3
with:
name: ${{ matrix.os }}-build
path: ./web/src-tauri/target/release/bundle/deb/${{ env.ARTIFACT_NAME1 }}
if: ${{ matrix.os == 'ubuntu-arm64' }}
- name: Archive build 2 (Ubuntu ARM)
uses: actions/upload-artifact@v3
with:
name: ${{ matrix.os }}-build
path: ./web/src-tauri/target/release/bundle/appimage/${{ env.ARTIFACT_NAME2 }}
if: ${{ matrix.os == 'ubuntu-arm64' }}
- name: Archive build 3 (Ubuntu ARM)
uses: actions/upload-artifact@v3
with:
name: ${{ matrix.os }}-build
path: ./web/src-tauri/target/release/bundle/rpm/${{ env.ARTIFACT_NAME3 }}
if: ${{ matrix.os == 'ubuntu-arm64' }}
- name: Archive build (macOS)
uses: actions/upload-artifact@v3
with:
name: ${{ matrix.os }}-build
path: |
./web/src-tauri/target/release/bundle/dmg/${{ env.ARTIFACT_NAME1 }}
./web/src-tauri/target/release/bundle/macos/${{ env.ARTIFACT_NAME2 }}
if: ${{ matrix.os == 'macOS-latest' || matrix.os == 'macOS-13' }}
- name: Archive build (Windows)
uses: actions/upload-artifact@v3
with:
name: ${{ matrix.os }}-build
path: |
./web/src-tauri/target/release/bundle/nsis/${{ env.ARTIFACT_NAME1 }}
./web/src-tauri/target/release/bundle/msi/${{ env.ARTIFACT_NAME2 }}
if: ${{ matrix.os == 'windows-latest' }}
- name: Upload release asset (Ubuntu - DEB)
if: github.event_name == 'release' && matrix.os == 'ubuntu-latest'
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: ./web/src-tauri/target/release/bundle/deb/${{ env.ARTIFACT_NAME1 }}
asset_name: ${{ env.ARTIFACT_NAME1 }}
asset_content_type: application/vnd.debian.binary-package
- name: Upload release asset (Ubuntu ARM - DEB)
if: github.event_name == 'release' && matrix.os == 'ubuntu-arm64'
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: ./web/src-tauri/target/release/bundle/deb/${{ env.ARTIFACT_NAME1 }}
asset_name: ${{ env.ARTIFACT_NAME1 }}
asset_content_type: application/vnd.debian.binary-package
- name: Upload release asset (Ubuntu - AppImage)
if: github.event_name == 'release' && matrix.os == 'ubuntu-latest'
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: ./web/src-tauri/target/release/bundle/appimage/${{ env.ARTIFACT_NAME2 }}
asset_name: ${{ env.ARTIFACT_NAME2 }}
asset_content_type: application/x-executable
- name: Upload release asset (Ubuntu ARM - AppImage)
if: github.event_name == 'release' && matrix.os == 'ubuntu-arm64'
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: ./web/src-tauri/target/release/bundle/appimage/${{ env.ARTIFACT_NAME2 }}
asset_name: ${{ env.ARTIFACT_NAME2 }}
asset_content_type: application/x-executable
- name: Upload release asset (Ubuntu - RPM)
if: github.event_name == 'release' && matrix.os == 'ubuntu-latest'
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: ./web/src-tauri/target/release/bundle/rpm/${{ env.ARTIFACT_NAME3 }}
asset_name: ${{ env.ARTIFACT_NAME3 }}
asset_content_type: application/x-rpm
- name: Upload release asset (Ubuntu ARM - RPM)
if: github.event_name == 'release' && matrix.os == 'ubuntu-arm64'
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: ./web/src-tauri/target/release/bundle/rpm/${{ env.ARTIFACT_NAME3 }}
asset_name: ${{ env.ARTIFACT_NAME3 }}
asset_content_type: application/x-rpm
- name: Upload release asset (macOS - DMG)
if: github.event_name == 'release' && (matrix.os == 'macOS-latest' || matrix.os == 'macOS-13')
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: ./web/src-tauri/target/release/bundle/dmg/${{ env.ARTIFACT_NAME1 }}
asset_name: ${{ env.ARTIFACT_NAME1 }}
asset_content_type: application/x-apple-diskimage
- name: Upload release asset (Windows - EXE)
if: github.event_name == 'release' && matrix.os == 'windows-latest'
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: ./web/src-tauri/target/release/bundle/nsis/${{ env.ARTIFACT_NAME1 }}
asset_name: ${{ env.ARTIFACT_NAME1 }}
asset_content_type: application/vnd.microsoft.portable-executable
- name: Upload release asset (Windows - MSI)
if: github.event_name == 'release' && matrix.os == 'windows-latest'
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: ./web/src-tauri/target/release/bundle/msi/${{ env.ARTIFACT_NAME2 }}
asset_name: ${{ env.ARTIFACT_NAME2 }}
asset_content_type: application/x-msi
# release:
# needs: compile
# runs-on: ubuntu-latest
# steps:
# - name: Checkout code
# uses: actions/checkout@v2
# - name: Download artifacts
# uses: actions/download-artifact@v2
# with:
# name: ubuntu-latest-build
# path: artifacts/ubuntu-latest
# - name: Download artifacts
# uses: actions/download-artifact@v2
# with:
# name: macOS-latest-build
# path: artifacts/macOS-latest
# - name: Download artifacts
# uses: actions/download-artifact@v2
# with:
# name: windows-latest-build
# path: artifacts/windows-latest
# - name: Create Release
# id: create_release
# uses: actions/create-release@v1
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# with:
# tag_name: release-${{ github.run_id }}-beta
# release_name: Release-${{ github.run_id }}-beta
# draft: false
# prerelease: true
# - name: Upload Release Asset
# id: upload-release-asset-ubuntu
# uses: actions/upload-release-asset@v1
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# with:
# upload_url: ${{ steps.create_release.outputs.upload_url }}
# asset_path: ./artifacts/ubuntu-latest/PinePods
# asset_name: PinePods-ubuntu-latest
# asset_content_type: application/octet-stream
# - name: Upload Release Asset
# id: upload-release-asset-macos
# uses: actions/upload-release-asset@v1
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# with:
# upload_url: ${{ steps.create_release.outputs.upload_url }}
# asset_path: ./artifacts/macOS-latest/PinePods
# asset_name: PinePods-macOS-latest
# asset_content_type: application/octet-stream
# - name: Upload Release Asset
# id: upload-release-asset-windows
# uses: actions/upload-release-asset@v1
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# with:
# upload_url: ${{ steps.create_release.outputs.upload_url }}
# asset_path: ./artifacts/windows-latest/PinePods.exe
# asset_name: PinePods-windows-latest.exe
# asset_content_type: application/octet-stream