Build Tauri Clients #100
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |