Files
Pake/.github/actions/setup-env/action.yml
Tw93 ba1e1f0243 🐛 update
2025-09-07 00:59:14 +08:00

157 lines
4.8 KiB
YAML
Vendored

name: Setup Development Environment
description: One-stop setup with smart presets
# Modes: full (default), node-only, rust-only, build (with cache)
inputs:
mode:
description: "Setup mode: full, node-only, rust-only, or build"
required: false
default: "full"
outputs:
setup-complete:
description: Setup completion status
value: "true"
runs:
using: composite
steps:
# 1. Setup environment flags
- name: Setup environment flags
shell: bash
run: |
MODE="${{ inputs.mode }}"
# Validate and set flags in one pass
case "$MODE" in
full)
echo "SETUP_NODE=true" >> $GITHUB_ENV
echo "SETUP_RUST=true" >> $GITHUB_ENV
echo "SETUP_SYSTEM=true" >> $GITHUB_ENV
;;
node-only)
echo "SETUP_NODE=true" >> $GITHUB_ENV
echo "SETUP_RUST=false" >> $GITHUB_ENV
echo "SETUP_SYSTEM=false" >> $GITHUB_ENV
;;
rust-only)
echo "SETUP_NODE=false" >> $GITHUB_ENV
echo "SETUP_RUST=true" >> $GITHUB_ENV
echo "SETUP_SYSTEM=false" >> $GITHUB_ENV
;;
build)
echo "SETUP_NODE=true" >> $GITHUB_ENV
echo "SETUP_RUST=true" >> $GITHUB_ENV
echo "SETUP_SYSTEM=true" >> $GITHUB_ENV
;;
*)
echo "❌ Invalid mode: '$MODE'. Valid modes: full, node-only, rust-only, build"
exit 1
;;
esac
# 2. Node.js Environment Setup
- name: Install pnpm
if: env.SETUP_NODE == 'true'
uses: pnpm/action-setup@v4
with:
version: "10.15.0"
run_install: false
- name: Setup Node.js
if: env.SETUP_NODE == 'true'
uses: actions/setup-node@v4
with:
node-version: "22"
cache: pnpm
- name: Install dependencies
if: env.SETUP_NODE == 'true'
shell: bash
run: pnpm install --frozen-lockfile
# 3. Rust Environment Setup
- name: Setup Rust for Linux
if: env.SETUP_RUST == 'true' && runner.os == 'Linux'
uses: dtolnay/rust-toolchain@stable
with:
toolchain: stable
target: x86_64-unknown-linux-gnu
- name: Setup Rust for Windows
if: env.SETUP_RUST == 'true' && runner.os == 'Windows'
uses: dtolnay/rust-toolchain@stable
with:
toolchain: stable-x86_64-msvc
target: x86_64-pc-windows-msvc
- name: Setup Rust for macOS
if: env.SETUP_RUST == 'true' && runner.os == 'macOS'
uses: dtolnay/rust-toolchain@stable
with:
toolchain: stable
- name: Add macOS universal targets
if: env.SETUP_RUST == 'true' && runner.os == 'macOS'
shell: bash
run: |
rustup target add x86_64-apple-darwin
rustup target add aarch64-apple-darwin
# 4. System Dependencies
- name: Install Ubuntu dependencies
if: env.SETUP_SYSTEM == 'true' && runner.os == 'Linux'
uses: awalsh128/cache-apt-pkgs-action@v1.4.3
with:
packages: >
libdbus-1-dev libsoup-3.0-dev libjavascriptcoregtk-4.1-dev libwebkit2gtk-4.1-dev
build-essential curl wget file libxdo-dev libssl-dev libgtk-3-dev
libayatana-appindicator3-dev librsvg2-dev gnome-video-effects
libglib2.0-dev libgirepository1.0-dev
pkg-config
version: 1.1
- name: Set PKG_CONFIG_PATH for Linux
if: env.SETUP_SYSTEM == 'true' && runner.os == 'Linux'
shell: bash
run: |
echo "PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/share/pkgconfig:/usr/lib/x86_64-linux-gnu/pkgconfig" >> $GITHUB_ENV
- name: Install WIX Toolset
if: env.SETUP_SYSTEM == 'true' && runner.os == 'Windows'
shell: powershell
run: |
try {
# Download and install WIX Toolset v3.11
Invoke-WebRequest -Uri "https://github.com/wixtoolset/wix3/releases/download/wix3112rtm/wix311.exe" -OutFile "wix311.exe"
Start-Process -FilePath "wix311.exe" -ArgumentList "/quiet" -Wait
# Add WIX to PATH
$wixPath = "${env:ProgramFiles(x86)}\WiX Toolset v3.11\bin"
if (Test-Path $wixPath) {
echo $wixPath >> $env:GITHUB_PATH
Write-Host "✅ WIX Toolset installed successfully"
} else {
Write-Warning "WIX installation path not found"
}
} catch {
Write-Error "Failed to install WIX Toolset: $($_.Exception.Message)"
exit 1
}
# 5. Build optimizations (caching)
- name: Setup Rust cache
if: inputs.mode == 'build'
uses: actions/cache@v4
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
src-tauri/target/
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-