Skip to content

feat(ccproxy): improve tool call error handling with XML escape remin… #36

feat(ccproxy): improve tool call error handling with XML escape remin…

feat(ccproxy): improve tool call error handling with XML escape remin… #36

Workflow file for this run

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