eigent/.github/workflows/build-view.yml

220 lines
7.5 KiB
YAML

name: Build-View
on:
workflow_dispatch:
permissions:
contents: write
jobs:
build:
runs-on: ${{ matrix.os }}
timeout-minutes: 120
strategy:
matrix:
include:
- os: macos-latest
arch: arm64
- os: macos-15-intel
arch: x64
- os: windows-latest
arch: x64
- os: ubuntu-latest
arch: x64
steps:
- name: Free Disk Space (macOS)
if: runner.os == 'macOS'
run: |
echo "Disk space before cleanup:"
df -h
# Remove iOS simulators
sudo rm -rf ~/Library/Developer/CoreSimulator/Devices/* || true
# Remove watchOS simulators
sudo rm -rf ~/Library/Developer/Xcode/watchOS\ DeviceSupport/* || true
# Remove tvOS simulators
sudo rm -rf ~/Library/Developer/Xcode/tvOS\ DeviceSupport/* || true
# Remove iOS DeviceSupport
sudo rm -rf ~/Library/Developer/Xcode/iOS\ DeviceSupport/* || true
# Remove derived data
sudo rm -rf ~/Library/Developer/Xcode/DerivedData/* || true
# Remove old archives
sudo rm -rf ~/Library/Developer/Xcode/Archives/* || true
# Remove Android SDK if present
sudo rm -rf ~/Library/Android/sdk || true
# Remove .NET
sudo rm -rf /usr/local/share/dotnet || true
# Remove Homebrew cache
rm -rf ~/Library/Caches/Homebrew/* || true
# Remove npm cache
npm cache clean --force || true
echo "Disk space after cleanup:"
df -h
- name: Checkout Code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 20
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: '3.11'
- name: Install Python Dependencies
run: |
python -m pip install --upgrade pip
pip install uv
- name: Install bun
run: npm install -g bun
- name: Install Dependencies
run: npm install
# Install libfuse2 for Linux AppImage builds
- name: Install libfuse2 (Linux)
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y libfuse2
# Step for macOS builds with signing
- name: Build Release Files (macOS with signing)
if: runner.os == 'macOS'
timeout-minutes: 90
run: npm run build -- --arch ${{ matrix.arch }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CSC_LINK: ${{ secrets.CERT_P12 }}
CSC_KEY_PASSWORD: ${{ secrets.CERT_PASSWORD }}
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
VITE_BASE_URL: ${{ secrets.VITE_BASE_URL }}
VITE_STACK_PROJECT_ID: ${{ secrets.VITE_STACK_PROJECT_ID }}
VITE_STACK_PUBLISHABLE_CLIENT_KEY: ${{ secrets.VITE_STACK_PUBLISHABLE_CLIENT_KEY }}
VITE_STACK_SECRET_SERVER_KEY: ${{ secrets.VITE_STACK_SECRET_SERVER_KEY }}
USE_NPM_INSTALL_BUN: 'true'
# Step for Windows builds without signing
- name: Build Release Files (Windows without signing)
if: runner.os == 'Windows'
timeout-minutes: 90
run: npm run build -- --arch ${{ matrix.arch }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# Signing variables (CSC_LINK, CSC_KEY_PASSWORD) are omitted for Windows
VITE_BASE_URL: ${{ secrets.VITE_BASE_URL }}
VITE_STACK_PROJECT_ID: ${{ secrets.VITE_STACK_PROJECT_ID }}
VITE_STACK_PUBLISHABLE_CLIENT_KEY: ${{ secrets.VITE_STACK_PUBLISHABLE_CLIENT_KEY }}
VITE_STACK_SECRET_SERVER_KEY: ${{ secrets.VITE_STACK_SECRET_SERVER_KEY }}
USE_NPM_INSTALL_BUN: 'true'
# Step for Linux builds
- name: Build Release Files (Linux)
if: runner.os == 'Linux'
timeout-minutes: 90
run: npm run build:linux
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
VITE_BASE_URL: ${{ secrets.VITE_BASE_URL }}
VITE_STACK_PROJECT_ID: ${{ secrets.VITE_STACK_PROJECT_ID }}
VITE_STACK_PUBLISHABLE_CLIENT_KEY: ${{ secrets.VITE_STACK_PUBLISHABLE_CLIENT_KEY }}
VITE_STACK_SECRET_SERVER_KEY: ${{ secrets.VITE_STACK_SECRET_SERVER_KEY }}
USE_NPM_INSTALL_BUN: 'true'
- name: Upload Artifact (macOS - dmg only)
if: runner.os == 'macOS'
uses: actions/upload-artifact@v6
with:
name: release-${{ matrix.os }}-${{ matrix.arch }}
path: |
release/*.dmg
retention-days: 5
- name: Upload Artifact (Windows - exe only)
if: runner.os == 'Windows'
uses: actions/upload-artifact@v6
with:
name: release-${{ matrix.os }}-${{ matrix.arch }}
path: |
release/*.exe
retention-days: 5
- name: Upload Artifact (Linux - AppImage only)
if: runner.os == 'Linux'
uses: actions/upload-artifact@v6
with:
name: release-${{ matrix.os }}-${{ matrix.arch }}
path: |
release/*.AppImage
retention-days: 5
merge-release:
needs: build
runs-on: ubuntu-latest
steps:
- name: Create directories
run: |
mkdir -p release/mac-x64 release/mac-arm64 release/win-x64 release/linux-x64
# Download all artifacts with correct names
- name: Download mac-x64 artifact
uses: actions/download-artifact@v7
with:
name: release-macos-15-intel-x64
path: temp-mac-x64
- name: Download mac-arm64 artifact
uses: actions/download-artifact@v7
with:
name: release-macos-latest-arm64
path: temp-mac-arm64
- name: Download win-x64 artifact
uses: actions/download-artifact@v7
with:
name: release-windows-latest-x64
path: temp-win-x64
- name: Download linux-x64 artifact
uses: actions/download-artifact@v7
with:
name: release-ubuntu-latest-x64
path: temp-linux-x64
# Move only dmg files for macOS, exe files for Windows, and AppImage for Linux
- name: Move files to clean folders
shell: bash
run: |
# mac-x64 - only move dmg files
if [ -d "temp-mac-x64/release" ]; then
find temp-mac-x64/release -name "*.dmg" -exec mv {} release/mac-x64/ \; || true
else
find temp-mac-x64 -name "*.dmg" -exec mv {} release/mac-x64/ \; || true
fi
# mac-arm64 - only move dmg files
if [ -d "temp-mac-arm64/release" ]; then
find temp-mac-arm64/release -name "*.dmg" -exec mv {} release/mac-arm64/ \; || true
else
find temp-mac-arm64 -name "*.dmg" -exec mv {} release/mac-arm64/ \; || true
fi
# win-x64 - only move exe files
if [ -d "temp-win-x64/release" ]; then
find temp-win-x64/release -name "*.exe" -exec mv {} release/win-x64/ \; || true
else
find temp-win-x64 -name "*.exe" -exec mv {} release/win-x64/ \; || true
fi
# linux-x64 - only move AppImage files
if [ -d "temp-linux-x64/release" ]; then
find temp-linux-x64/release -name "*.AppImage" -exec mv {} release/linux-x64/ \; || true
else
find temp-linux-x64 -name "*.AppImage" -exec mv {} release/linux-x64/ \; || true
fi