Release #43
Workflow file for this run
This file contains hidden or 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: Release | |
| on: | |
| push: | |
| tags: | |
| - "v*" | |
| workflow_dispatch: | |
| inputs: | |
| draft: | |
| description: "Create as draft release" | |
| required: false | |
| default: true | |
| type: boolean | |
| permissions: write-all | |
| env: | |
| CARGO_INCREMENTAL: 0 | |
| RUST_BACKTRACE: short | |
| CARGO_TERM_COLOR: always | |
| jobs: | |
| create-release: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| release-id: ${{ steps.create-release.outputs.release_id }} | |
| upload-url: ${{ steps.create-release.outputs.upload_url }} | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Create Release | |
| id: create-release | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| const { data } = await github.rest.repos.createRelease({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| tag_name: '${{ github.ref_name }}', | |
| target_commitish: '${{ github.sha }}', | |
| name: 'ChatSpeed ${{ github.ref_name }}', | |
| body: 'See the assets below to download and install this version.', | |
| draft: true, | |
| prerelease: ${{ contains(github.ref_name, '-') }} | |
| }); | |
| core.setOutput('release_id', data.id); | |
| core.setOutput('upload_url', data.upload_url); | |
| release-windows: | |
| needs: create-release | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - os: windows-latest | |
| target: x86_64-pc-windows-msvc | |
| - os: windows-latest | |
| target: aarch64-pc-windows-msvc | |
| runs-on: ${{ matrix.os }} | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v4 | |
| - name: Install Rust Stable | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Add Rust Target | |
| run: rustup target add ${{ matrix.target }} | |
| - name: Cache cargo registry | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cargo/registry | |
| ~/.cargo/git | |
| target | |
| key: ${{ runner.os }}-cargo-${{ matrix.target }}-${{ hashFiles('**/Cargo.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-cargo-${{ matrix.target }}- | |
| ${{ runner.os }}-cargo- | |
| - name: Cache vcpkg | |
| uses: actions/cache@v4 | |
| with: | |
| path: ${{ env.VCPKG_INSTALLATION_ROOT }}/installed | |
| key: ${{ runner.os }}-vcpkg-${{ matrix.target }}-${{ hashFiles('**/vcpkg.json') }} | |
| restore-keys: | | |
| ${{ runner.os }}-vcpkg-${{ matrix.target }}- | |
| ${{ runner.os }}-vcpkg- | |
| - name: Rust Cache | |
| uses: Swatinem/rust-cache@v2 | |
| with: | |
| shared-key: "${{ runner.os }}-rust-${{ matrix.target }}" | |
| workspaces: src-tauri | |
| cache-targets: false | |
| cache-on-failure: true | |
| - name: Setup vcpkg env | |
| shell: pwsh | |
| run: | | |
| # Set vcpkg root directory | |
| $VCPKG_ROOT = "$env:VCPKG_INSTALLATION_ROOT" | |
| echo "VCPKG_ROOT=$VCPKG_ROOT" >> $env:GITHUB_ENV | |
| # Set target architecture variables | |
| if ("${{ matrix.target }}" -eq "x86_64-pc-windows-msvc") { | |
| echo "VCPKG_DEFAULT_TRIPLET=x64-windows-static" >> $env:GITHUB_ENV | |
| echo "CARGO_CFG_TARGET_ARCH=x86_64" >> $env:GITHUB_ENV | |
| } else { | |
| echo "VCPKG_DEFAULT_TRIPLET=arm64-windows-static" >> $env:GITHUB_ENV | |
| echo "CARGO_CFG_TARGET_ARCH=aarch64" >> $env:GITHUB_ENV | |
| } | |
| # Set common vcpkg variables | |
| echo "VCPKG_INSTALLED_DIR=$VCPKG_ROOT/installed" >> $env:GITHUB_ENV | |
| echo "VCPKG_CRT_LINKAGE=static" >> $env:GITHUB_ENV | |
| echo "VCPKG_LIBRARY_LINKAGE=static" >> $env:GITHUB_ENV | |
| - name: Install dependencies (windows) | |
| shell: pwsh | |
| run: | | |
| # Set dependency paths | |
| if ("${{ matrix.target }}" -eq "x86_64-pc-windows-msvc") { | |
| $TRIPLET = "x64-windows-static" | |
| } else { | |
| $TRIPLET = "arm64-windows-static" | |
| } | |
| # Set library directory variables | |
| $SQLITE3_LIB_DIR = "$env:VCPKG_ROOT/installed/$TRIPLET/lib" | |
| $SQLITE3_INCLUDE_DIR = "$env:VCPKG_ROOT/installed/$TRIPLET/include" | |
| echo "SQLITE3_LIB_DIR=$SQLITE3_LIB_DIR" >> $env:GITHUB_ENV | |
| echo "SQLITE3_INCLUDE_DIR=$SQLITE3_INCLUDE_DIR" >> $env:GITHUB_ENV | |
| # Install dependencies | |
| Write-Host "Installing dependencies for triplet: $TRIPLET" | |
| vcpkg install "sqlite3:$TRIPLET" | |
| vcpkg install "bzip2:$TRIPLET" | |
| # Verify installation | |
| Write-Host "Verifying installation..." | |
| Write-Host "Checking SQLite3 lib directory: $SQLITE3_LIB_DIR" | |
| if (Test-Path $SQLITE3_LIB_DIR) { | |
| Write-Host "SQLite3 lib directory exists, contents:" | |
| Get-ChildItem $SQLITE3_LIB_DIR | |
| } else { | |
| Write-Host "Error: SQLite3 lib directory not found at: $SQLITE3_LIB_DIR" | |
| Write-Host "VCPKG_ROOT: $env:VCPKG_ROOT" | |
| Write-Host "Installed directory contents:" | |
| Get-ChildItem "$env:VCPKG_ROOT/installed" | |
| exit 1 | |
| } | |
| - name: Setup Rust env | |
| shell: pwsh | |
| run: | | |
| # Set Rust environment variables | |
| echo "RUSTFLAGS=-Ctarget-feature=+crt-static" >> $env:GITHUB_ENV | |
| echo "RUST_BACKTRACE=1" >> $env:GITHUB_ENV | |
| # Set vcpkg integration environment variables | |
| echo "VCPKGRS_DYNAMIC=0" >> $env:GITHUB_ENV | |
| echo "VCPKGRS_TRIPLET=$env:VCPKG_DEFAULT_TRIPLET" >> $env:GITHUB_ENV | |
| - name: Install Node | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: "22" | |
| cache: yarn | |
| - name: Enable Corepack | |
| run: corepack enable | |
| - name: Yarn install | |
| run: yarn install --immutable | |
| - name: Build Frontend | |
| run: yarn build | |
| - name: Tauri build | |
| uses: tauri-apps/tauri-action@v0.5.22 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }} | |
| TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }} | |
| with: | |
| releaseId: ${{ needs.create-release.outputs.release-id }} | |
| args: --target ${{ matrix.target }} --bundles nsis | |
| includeUpdaterJson: true | |
| release-macos: | |
| needs: create-release | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - os: macos-15 | |
| target: aarch64-apple-darwin | |
| - os: macos-15 | |
| target: x86_64-apple-darwin | |
| runs-on: ${{ matrix.os }} | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v4 | |
| - name: Install Rust Stable | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Add Rust Target | |
| run: rustup target add ${{ matrix.target }} | |
| - name: Cache cargo registry | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cargo/registry | |
| ~/.cargo/git | |
| target | |
| key: ${{ runner.os }}-cargo-${{ matrix.target }}-${{ hashFiles('**/Cargo.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-cargo-${{ matrix.target }}- | |
| ${{ runner.os }}-cargo- | |
| - name: Rust Cache | |
| uses: Swatinem/rust-cache@v2 | |
| with: | |
| shared-key: "${{ runner.os }}-rust-${{ matrix.target }}" | |
| workspaces: src-tauri | |
| cache-targets: false | |
| cache-on-failure: true | |
| - name: Install dependencies (macOS) | |
| run: | | |
| brew list sqlite3 || brew install sqlite3 | |
| if ! brew list bzip2 &>/dev/null; | |
| then | |
| brew install bzip2 || echo "bzip2 installation failed, but may already be available system-wide" | |
| fi | |
| echo "SQLITE3_DIR=$(brew --prefix sqlite3)" >> $GITHUB_ENV | |
| BZIP2_PREFIX=$(brew --prefix bzip2 2>/dev/null || echo "/usr/local") | |
| echo "LDFLAGS=-L$(brew --prefix sqlite3)/lib -L$BZIP2_PREFIX/lib" >> $GITHUB_ENV | |
| echo "CPPFLAGS=-I$(brew --prefix sqlite3)/include -I$BZIP2_PREFIX/include" >> $GITHUB_ENV | |
| echo "PKG_CONFIG_PATH=$(brew --prefix sqlite3)/lib/pkgconfig:$BZIP2_PREFIX/lib/pkgconfig" >> $GITHUB_ENV | |
| - name: Install Node | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: "22" | |
| cache: yarn | |
| - name: Enable Corepack | |
| run: corepack enable | |
| - name: Yarn install | |
| run: yarn install --immutable | |
| - name: Build Frontend | |
| run: yarn build | |
| - name: Tauri build | |
| uses: tauri-apps/tauri-action@v0.5.22 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }} | |
| TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }} | |
| # Apple signing - commented out until we have developer certificates | |
| # APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }} | |
| # APPLE_ID: ${{ secrets.APPLE_ID }} | |
| # APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }} | |
| # APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} | |
| with: | |
| releaseId: ${{ needs.create-release.outputs.release-id }} | |
| args: --target ${{ matrix.target }} | |
| includeUpdaterJson: true | |
| release-linux: | |
| needs: create-release | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - os: ubuntu-22.04 | |
| target: x86_64-unknown-linux-gnu | |
| arch: x86_64 | |
| runs-on: ${{ matrix.os }} | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v4 | |
| - name: Install Rust Stable | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Add Rust Target | |
| run: rustup target add ${{ matrix.target }} | |
| - name: Cache cargo registry | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cargo/registry | |
| ~/.cargo/git | |
| target | |
| key: ${{ runner.os }}-cargo-${{ matrix.target }}-${{ hashFiles('**/Cargo.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-cargo-${{ matrix.target }}- | |
| ${{ runner.os }}-cargo- | |
| - name: Rust Cache | |
| uses: Swatinem/rust-cache@v2 | |
| with: | |
| shared-key: "${{ runner.os }}-rust-${{ matrix.target }}" | |
| workspaces: src-tauri | |
| cache-targets: false | |
| cache-on-failure: true | |
| - name: Install dependencies (ubuntu only) | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y \ | |
| libwebkit2gtk-4.1-dev \ | |
| libayatana-appindicator3-dev \ | |
| librsvg2-dev \ | |
| patchelf \ | |
| sqlite3 \ | |
| libsqlite3-dev \ | |
| rpm | |
| - name: Install Node | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: "22" | |
| cache: yarn | |
| - name: Enable Corepack | |
| run: corepack enable | |
| - name: Yarn install | |
| run: yarn install --immutable | |
| - name: Build Frontend | |
| run: yarn build | |
| - name: Tauri build | |
| uses: tauri-apps/tauri-action@v0.5.22 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }} | |
| TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }} | |
| with: | |
| releaseId: ${{ needs.create-release.outputs.release-id }} | |
| args: --verbose --target ${{ matrix.target }} --bundles deb,rpm,appimage | |
| includeUpdaterJson: true |