eigent/.github/workflows/build.yml
2026-01-21 23:59:26 +08:00

179 lines
5.5 KiB
YAML

name: Build
on:
push:
tags:
- "v*"
paths-ignore:
- "**.md"
- "**.spec.js"
- ".idea"
- ".vscode"
- ".dockerignore"
- "Dockerfile"
- ".gitignore"
- ".github/**"
- "!.github/workflows/build.yml"
permissions:
contents: write
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
include:
- os: [self-hosted, macOS, ARM64]
arch: arm64
artifact_name: macos-arm64
- os: windows-latest
arch: x64
artifact_name: windows-latest
- os: ubuntu-latest
arch: x64
artifact_name: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v4
with:
clean: true
- name: Setup Node.js
if: "!contains(matrix.os, 'self-hosted')"
uses: actions/setup-node@v6
with:
node-version: 20
- name: Setup Python
if: "!contains(matrix.os, 'self-hosted')"
uses: actions/setup-python@v6
with:
python-version: "3.11"
- name: Install Python Dependencies
run: |
python3 -m pip install --upgrade pip
pip3 install uv
- 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'
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 }}
# Step for Windows builds without signing
- name: Build Release Files (Windows without signing)
if: runner.os == 'Windows'
run: npm run build -- --arch ${{ matrix.arch }}
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 }}
# Step for Linux builds
- name: Build Release Files (Linux)
if: runner.os == 'Linux'
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 }}
- name: Upload Artifact
uses: actions/upload-artifact@v6
with:
name: release-${{ matrix.artifact_name }}-${{ matrix.arch }}
path: |
release/*
!release/builder-debug.yml
!release/builder-effective-config.yaml
retention-days: 5
merge-release:
needs: build
runs-on: ubuntu-latest
steps:
- name: Create directories
run: |
mkdir -p release/mac-arm64 release/win-x64 release/linux-x64
- name: Download mac-arm64 artifact
uses: actions/download-artifact@v7
with:
name: release-macos-arm64-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 files to final release directory, removing any nested release/ directory
- name: Move files to clean folders
shell: bash
run: |
# mac-arm64
if [ -d "temp-mac-arm64/release" ]; then
mv temp-mac-arm64/release/* release/mac-arm64/ || true
else
mv temp-mac-arm64/* release/mac-arm64/ || true
fi
# win-x64
if [ -d "temp-win-x64/release" ]; then
mv temp-win-x64/release/* release/win-x64/ || true
else
mv temp-win-x64/* release/win-x64/ || true
fi
# linux-x64
if [ -d "temp-linux-x64/release" ]; then
mv temp-linux-x64/release/* release/linux-x64/ || true
else
mv temp-linux-x64/* release/linux-x64/ || true
fi
# Create GitHub Release
- name: Create GitHub Release
if: startsWith(github.ref, 'refs/tags/')
uses: softprops/action-gh-release@v1
with:
files: |
release/mac-arm64/*
release/win-x64/*
release/linux-x64/*
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}