Skip to content

优化部分界面

优化部分界面 #34

Workflow file for this run

# Dev 分支推送构建
name: Build Dev
on:
push:
branches:
- dev
paths:
- "src/**"
- "electron/**"
- "native/**"
- "shared/**"
- "public/**"
- "package.json"
- "pnpm-lock.yaml"
- "electron-builder.config.ts"
- "electron.vite.config.ts"
- "tsconfig*.json"
- ".github/**"
workflow_dispatch:
env:
NODE_VERSION: 22.x
BUILDER_REPO: apoint123/ffmpeg-builder
FFMPEG_VERSION_TAG: "8.0.1"
jobs:
build:
name: Build on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: windows-latest
name: windows
arch: x64
artifact_name_suffix: windows-x64
package_extension: zip
build_cmd: pnpm build:win -- --x64
- os: macos-latest
name: macOS
arch: arm64
artifact_name_suffix: macos-arm64
package_extension: tar.gz
build_cmd: pnpm build:mac -- --arm64
- os: macos-latest
name: macOS
arch: x64
artifact_name_suffix: macos-x64
package_extension: tar.gz
build_cmd: pnpm build:mac -- --x64
- os: ubuntu-latest
name: linux
arch: x64
artifact_name_suffix: linux-x64
package_extension: tar.gz
build_cmd: pnpm build:linux -- --x64
steps:
- name: Check out git repository
uses: actions/checkout@v5
- name: Setup pnpm
uses: pnpm/action-setup@v4
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: ${{ env.NODE_VERSION }}
- name: Setup Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Rust Cache
uses: Swatinem/rust-cache@v2
with:
workspaces: "native/audio-engine -> target\nnative/media-ctrl -> target"
# 下载预编译的 FFmpeg 静态库 (Windows)
- name: 下载预编译的 FFmpeg 库 (Windows)
if: runner.os == 'Windows'
run: |
$packageName = "ffmpeg-${{ env.FFMPEG_VERSION_TAG }}-${{ matrix.artifact_name_suffix }}.${{ matrix.package_extension }}"
$downloadUrl = "https://github.com/${{ env.BUILDER_REPO }}/releases/latest/download/$packageName"
Write-Host "Downloading $packageName from $downloadUrl ..."
Invoke-WebRequest -Uri $downloadUrl -OutFile $packageName
mkdir -p vendor/ffmpeg
Expand-Archive -Path $packageName -DestinationPath vendor/ffmpeg_temp -Force
Move-Item -Path vendor/ffmpeg_temp/include -Destination vendor/ffmpeg/include
Move-Item -Path vendor/ffmpeg_temp/lib -Destination vendor/ffmpeg/lib
Remove-Item -Recurse -Force vendor/ffmpeg_temp
Remove-Item $packageName
echo "FFMPEG_DIR=${{ github.workspace }}/vendor/ffmpeg" >> $env:GITHUB_ENV
shell: powershell
# 下载预编译的 FFmpeg 静态库 (macOS/Linux)
- name: 下载预编译的 FFmpeg 库 (macOS/Linux)
if: runner.os != 'Windows'
run: |
PACKAGE_NAME="ffmpeg-${{ env.FFMPEG_VERSION_TAG }}-${{ matrix.artifact_name_suffix }}.${{ matrix.package_extension }}"
DOWNLOAD_URL="https://github.com/${{ env.BUILDER_REPO }}/releases/latest/download/${PACKAGE_NAME}"
echo "Downloading $PACKAGE_NAME from $DOWNLOAD_URL ..."
curl -f -sL $DOWNLOAD_URL -o $PACKAGE_NAME
mkdir -p vendor/ffmpeg
tar -xzf $PACKAGE_NAME -C vendor/ffmpeg
rm $PACKAGE_NAME
echo "FFMPEG_DIR=${{ github.workspace }}/vendor/ffmpeg" >> $GITHUB_ENV
shell: bash
# 设置 FFmpeg 环境变量
- name: 设置 FFmpeg 环境变量
run: |
echo "PKG_CONFIG_PATH=${{ github.workspace }}/vendor/ffmpeg/lib/pkgconfig" >> $GITHUB_ENV
if [[ "$RUNNER_OS" != "Windows" ]]; then
echo "CFLAGS=-I${{ github.workspace }}/vendor/ffmpeg/include" >> $GITHUB_ENV
fi
shell: bash
# Linux: 安装系统构建/打包依赖
- name: 安装系统依赖 (Linux)
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install --no-install-recommends -y \
libasound2-dev libdbus-1-dev pkg-config clang nasm \
rpm libarchive-tools
# 清理旧构建产物
- name: Clean workspace on Windows
if: runner.os == 'Windows'
run: |
if (Test-Path dist) { Remove-Item -Recurse -Force dist }
if (Test-Path out) { Remove-Item -Recurse -Force out }
- name: Clean workspace on macOS & Linux
if: runner.os != 'Windows'
run: rm -rf dist out
# CI 不需要国内镜像
- name: 移除 .npmrc
shell: bash
run: rm -f .npmrc
# 安装项目依赖
- name: Install dependencies
run: pnpm install
# 构建
- name: Build ${{ matrix.name }} ${{ matrix.arch }}
run: ${{ matrix.build_cmd }}
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CSC_IDENTITY_AUTO_DISCOVERY: false
# 上传构建产物 (Windows)
- name: Upload Windows Setup
if: runner.os == 'Windows'
uses: actions/upload-artifact@v4
with:
name: SPlayer-Next-Windows-setup-${{ matrix.arch }}
path: dist/*-setup.exe
# 上传构建产物 (macOS)
- name: Upload macOS DMG
if: runner.os == 'macOS'
uses: actions/upload-artifact@v4
with:
name: SPlayer-Next-macOS-dmg-${{ matrix.arch }}
path: dist/*.dmg
- name: Upload macOS Zip
if: runner.os == 'macOS'
uses: actions/upload-artifact@v4
with:
name: SPlayer-Next-macOS-zip-${{ matrix.arch }}
path: dist/*.zip
# 上传构建产物 (Linux)
- name: Upload Linux AppImage
if: runner.os == 'Linux'
uses: actions/upload-artifact@v4
with:
name: SPlayer-Next-Linux-appimage-${{ matrix.arch }}
path: dist/*.AppImage
- name: Upload Linux DEB
if: runner.os == 'Linux'
uses: actions/upload-artifact@v4
with:
name: SPlayer-Next-Linux-deb-${{ matrix.arch }}
path: dist/*.deb
- name: Upload Linux RPM
if: runner.os == 'Linux'
uses: actions/upload-artifact@v4
with:
name: SPlayer-Next-Linux-rpm-${{ matrix.arch }}
path: dist/*.rpm
- name: Upload Linux Tar
if: runner.os == 'Linux'
uses: actions/upload-artifact@v4
with:
name: SPlayer-Next-Linux-tar-${{ matrix.arch }}
path: dist/*.tar.gz