Skip to content

ci: remove setup-python, use system Python on self-hosted runners #4

ci: remove setup-python, use system Python on self-hosted runners

ci: remove setup-python, use system Python on self-hosted runners #4

Workflow file for this run

name: Release Desktop
on:
push:
tags:
- 'v*'
permissions:
contents: write
jobs:
build-sidecar:
strategy:
fail-fast: false
matrix:
include:
- runner: [self-hosted, macOS, ARM64]
target: aarch64-apple-darwin
sidecar_name: cashpilot-sidecar
- runner: [self-hosted, macOS, ARM64]
target: x86_64-apple-darwin
sidecar_name: cashpilot-sidecar
- runner: [self-hosted, Linux, X64]
target: x86_64-unknown-linux-gnu
sidecar_name: cashpilot-sidecar
- runner: [self-hosted, Windows, X64]
target: x86_64-pc-windows-msvc
sidecar_name: cashpilot-sidecar.exe
runs-on: ${{ matrix.runner }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v4
with:
repository: GeiserX/CashPilot
path: CashPilot
token: ${{ secrets.GITHUB_TOKEN }}
- name: Install Python dependencies
run: |
if command -v python3 &>/dev/null; then
python3 -m pip install -r sidecar/requirements.txt
else
python -m pip install -r sidecar/requirements.txt
fi
shell: bash
- name: Build sidecar
env:
CASHPILOT_BACKEND_PATH: ${{ github.workspace }}/CashPilot
working-directory: sidecar
run: |
if command -v python3 &>/dev/null; then
python3 -m PyInstaller cashpilot-sidecar.spec
else
python -m PyInstaller cashpilot-sidecar.spec
fi
shell: bash
- uses: actions/upload-artifact@v4
with:
name: sidecar-${{ matrix.target }}
path: sidecar/dist/${{ matrix.sidecar_name }}
build-tauri:
needs: build-sidecar
strategy:
fail-fast: false
matrix:
include:
- runner: [self-hosted, macOS, ARM64]
target: aarch64-apple-darwin
sidecar_artifact: sidecar-aarch64-apple-darwin
- runner: [self-hosted, macOS, ARM64]
target: x86_64-apple-darwin
sidecar_artifact: sidecar-x86_64-apple-darwin
- runner: [self-hosted, Linux, X64]
target: x86_64-unknown-linux-gnu
sidecar_artifact: sidecar-x86_64-unknown-linux-gnu
- runner: [self-hosted, Windows, X64]
target: x86_64-pc-windows-msvc
sidecar_artifact: sidecar-x86_64-pc-windows-msvc
runs-on: ${{ matrix.runner }}
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
name: ${{ matrix.sidecar_artifact }}
path: src-tauri/sidecar/
- name: Make sidecar executable
if: runner.os != 'Windows'
run: chmod +x src-tauri/sidecar/cashpilot-sidecar
- uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install Tauri CLI
run: npm install
- uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}
- name: Install Linux dependencies
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf
- name: Import Apple certificate
if: runner.os == 'macOS'
env:
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
run: |
KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db
KEYCHAIN_PASSWORD=$(openssl rand -base64 32)
security create-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH"
security set-keychain-settings -lut 21600 "$KEYCHAIN_PATH"
security unlock-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH"
echo "$APPLE_CERTIFICATE" | base64 --decode > $RUNNER_TEMP/certificate.p12
security import $RUNNER_TEMP/certificate.p12 -P "$APPLE_CERTIFICATE_PASSWORD" -A -t cert -f pkcs12 -k "$KEYCHAIN_PATH"
security set-key-partition-list -S apple-tool:,apple: -k "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH"
security list-keychains -d user -s "$KEYCHAIN_PATH" $(security list-keychains -d user | tr -d '"')
- name: Build Tauri app
env:
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }}
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
run: npx tauri build --target ${{ matrix.target }}
- name: Cleanup keychain
if: runner.os == 'macOS' && always()
run: |
security delete-keychain $RUNNER_TEMP/app-signing.keychain-db 2>/dev/null || true
- uses: actions/upload-artifact@v4
with:
name: desktop-${{ matrix.target }}
path: |
src-tauri/target/${{ matrix.target }}/release/bundle/**/*.dmg
src-tauri/target/${{ matrix.target }}/release/bundle/**/*.dmg.sig
src-tauri/target/${{ matrix.target }}/release/bundle/**/*.exe
src-tauri/target/${{ matrix.target }}/release/bundle/**/*.exe.sig
src-tauri/target/${{ matrix.target }}/release/bundle/**/*.AppImage
src-tauri/target/${{ matrix.target }}/release/bundle/**/*.AppImage.sig
src-tauri/target/${{ matrix.target }}/release/bundle/**/*.deb
src-tauri/target/${{ matrix.target }}/release/bundle/**/*.deb.sig
publish:
needs: build-tauri
runs-on: [self-hosted, Linux, X64]
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
path: artifacts/
- name: Generate updater manifest (latest.json)
run: |
VERSION="${GITHUB_REF_NAME#v}"
RELEASE_URL="https://github.com/GeiserX/CashPilot-Desktop/releases/download/${GITHUB_REF_NAME}"
# Read signature files
MACOS_ARM_SIG=$(cat artifacts/desktop-aarch64-apple-darwin/**/*.dmg.sig 2>/dev/null || echo "")
MACOS_X64_SIG=$(cat artifacts/desktop-x86_64-apple-darwin/**/*.dmg.sig 2>/dev/null || echo "")
LINUX_SIG=$(cat artifacts/desktop-x86_64-unknown-linux-gnu/**/*.AppImage.sig 2>/dev/null || echo "")
WINDOWS_SIG=$(cat artifacts/desktop-x86_64-pc-windows-msvc/**/*.exe.sig 2>/dev/null || echo "")
# Find artifact filenames
MACOS_ARM_DMG=$(find artifacts/desktop-aarch64-apple-darwin -name "*.dmg" ! -name "*.sig" | head -1 | xargs basename 2>/dev/null || echo "")
MACOS_X64_DMG=$(find artifacts/desktop-x86_64-apple-darwin -name "*.dmg" ! -name "*.sig" | head -1 | xargs basename 2>/dev/null || echo "")
LINUX_APPIMAGE=$(find artifacts/desktop-x86_64-unknown-linux-gnu -name "*.AppImage" ! -name "*.sig" | head -1 | xargs basename 2>/dev/null || echo "")
WINDOWS_EXE=$(find artifacts/desktop-x86_64-pc-windows-msvc -name "*.exe" ! -name "*.sig" | head -1 | xargs basename 2>/dev/null || echo "")
cat > latest.json << EOF
{
"version": "${VERSION}",
"notes": "See release notes on GitHub",
"pub_date": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
"platforms": {
"darwin-aarch64": {
"signature": "${MACOS_ARM_SIG}",
"url": "${RELEASE_URL}/${MACOS_ARM_DMG}"
},
"darwin-x86_64": {
"signature": "${MACOS_X64_SIG}",
"url": "${RELEASE_URL}/${MACOS_X64_DMG}"
},
"linux-x86_64": {
"signature": "${LINUX_SIG}",
"url": "${RELEASE_URL}/${LINUX_APPIMAGE}"
},
"windows-x86_64": {
"signature": "${WINDOWS_SIG}",
"url": "${RELEASE_URL}/${WINDOWS_EXE}"
}
}
}
EOF
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
files: |
artifacts/**/*.dmg
artifacts/**/*.exe
artifacts/**/*.AppImage
artifacts/**/*.deb
artifacts/**/*.sig
latest.json
generate_release_notes: true