Build and Release by Platform #43
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build and Release by Platform | |
| on: | |
| push: | |
| tags: | |
| - "v*" # 当推送标签(如 v1.0.0)时触发 | |
| workflow_dispatch: # 手动触发 | |
| jobs: | |
| # 针对 Ubuntu 构建 | |
| build-linux: | |
| name: Build for Linux | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout Code | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v3 | |
| with: | |
| node-version: 20.18.0 | |
| cache: npm | |
| - name: Install Dependencies | |
| run: npm install | |
| - name: Build Linux Package | |
| run: npm run make | |
| - name: Debug Output Directory | |
| run: ls -R out/make | |
| - name: Find .deb, .rpm and .zip files | |
| id: find_packages | |
| run: | | |
| # 查找文件路径 | |
| DEB_FILE=$(find out/make -type f -name "*.deb" | head -n 1) | |
| echo $DEB_FILE | |
| RPM_FILE=$(find out/make -type f -name "*.rpm" | head -n 1) | |
| echo $RPM_FILE | |
| LINUX_ZIP_FILE=$(find out/make -type f -name "*.zip" | head -n 1) | |
| echo $LINUX_ZIP_FILE | |
| # 输出路径供后续步骤使用 | |
| echo "DEB_FILE=$DEB_FILE" >> $GITHUB_ENV | |
| echo "RPM_FILE=$RPM_FILE" >> $GITHUB_ENV | |
| echo "LINUX_ZIP_FILE=$LINUX_ZIP_FILE" >> $GITHUB_ENV | |
| - name: Upload .deb Package | |
| uses: actions/upload-artifact@v4 | |
| if: ${{ env.DEB_FILE }} | |
| with: | |
| name: linux-deb-package | |
| path: ${{ env.DEB_FILE }} | |
| - name: Upload .rpm Package | |
| uses: actions/upload-artifact@v4 | |
| if: ${{ env.RPM_FILE }} | |
| with: | |
| name: linux-rpm-package | |
| path: ${{ env.RPM_FILE }} | |
| - name: Upload .zip Package | |
| uses: actions/upload-artifact@v4 | |
| if: ${{ env.LINUX_ZIP_FILE }} | |
| with: | |
| name: linux-zip-package | |
| path: ${{ env.LINUX_ZIP_FILE }} | |
| # 针对 Windows 构建 | |
| build-windows: | |
| name: Build for Windows | |
| runs-on: windows-2019 | |
| steps: | |
| - name: Checkout Code | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v3 | |
| with: | |
| node-version: 20.18.0 | |
| cache: npm | |
| - name: Install Dependencies | |
| run: npm install | |
| - name: Build Windows Package | |
| run: npm run make | |
| - name: Debug Output Directory | |
| run: ls -R out/make | |
| - name: Find exe and zip files | |
| id: find_packages | |
| run: | | |
| # 使用 PowerShell 命令查找 .exe 文件 | |
| $EXE_FILE = Get-ChildItem -Path "out/make" -Recurse -Filter "*.exe" | Select-Object -First 1 | |
| echo "EXE_FILE=$($EXE_FILE.FullName)" >> $env:GITHUB_ENV | |
| $WIN_ZIP_FILE = Get-ChildItem -Path "out/make" -Recurse -Filter "*.zip" | Select-Object -First 1 | |
| echo "WIN_ZIP_FILE=$($WIN_ZIP_FILE.FullName)" >> $env:GITHUB_ENV | |
| - name: Upload .exe Package | |
| uses: actions/upload-artifact@v4 | |
| if: ${{ env.EXE_FILE }} | |
| with: | |
| name: windows-exe-package | |
| path: ${{ env.EXE_FILE }} | |
| - name: Upload .zip Package | |
| uses: actions/upload-artifact@v4 | |
| if: ${{ env.WIN_ZIP_FILE }} | |
| with: | |
| name: windows-zip-package | |
| path: ${{ env.WIN_ZIP_FILE }} | |
| # 针对 macOS 构建 | |
| build-macos: | |
| name: Build for macOS | |
| runs-on: macos-latest | |
| steps: | |
| - name: Checkout Code | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v3 | |
| with: | |
| node-version: 20.18.0 | |
| cache: npm | |
| - name: Install Dependencies | |
| run: npm install | |
| - name: Build macOS Package | |
| run: npm run make | |
| - name: Debug Output Directory | |
| run: ls -R out/make | |
| - name: Find zip files | |
| id: find_packages | |
| run: | | |
| # 查找 .zip 文件路径 | |
| ZIP_FILE=$(find out/make -type f -name "*.zip" | head -n 1) | |
| echo $ZIP_FILE | |
| # 输出路径供后续步骤使用 | |
| echo "ZIP_FILE=$ZIP_FILE" >> $GITHUB_ENV | |
| - name: Upload MAC M1 ZIP Package | |
| uses: actions/upload-artifact@v4 | |
| if: ${{ env.ZIP_FILE }} | |
| with: | |
| name: macos-package | |
| path: ${{ env.ZIP_FILE }} | |
| build-macos-intel: | |
| name: Build for macOS intel | |
| runs-on: macos-13 | |
| steps: | |
| - name: Checkout Code | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v3 | |
| with: | |
| node-version: 20.18.0 | |
| cache: npm | |
| - name: Install Dependencies | |
| run: npm install | |
| - name: Build macOS Package | |
| run: npm run make | |
| - name: Debug Output Directory | |
| run: ls -R out/make | |
| - name: Find zip files | |
| id: find_packages | |
| run: | | |
| # 查找 .zip 文件路径 | |
| ZIP_FILE=$(find out/make -type f -name "*.zip" | head -n 1) | |
| echo $ZIP_FILE | |
| # 输出路径供后续步骤使用 | |
| echo "ZIP_FILE=$ZIP_FILE" >> $GITHUB_ENV | |
| - name: Upload MAC Intel ZIP Package | |
| uses: actions/upload-artifact@v4 | |
| if: ${{ env.ZIP_FILE }} | |
| with: | |
| name: macos-intel-package | |
| path: ${{ env.ZIP_FILE }} | |
| # 发布到 GitHub Release | |
| release: | |
| name: Release Artifacts | |
| needs: [build-linux, build-windows, build-macos, build-macos-intel] | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| steps: | |
| - uses: actions/checkout@v4 # ★ 必须要加,让 gh 能找到 .git | |
| - name: Download Linux .deb Artifact | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: linux-deb-package | |
| path: dist/linux | |
| - name: Check download result | |
| run: ls -R dist | |
| - name: Download Linux .rpm Artifact | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: linux-rpm-package | |
| path: dist/linux | |
| - name: Check download result | |
| run: ls -R dist | |
| - name: Download Linux .zip Artifact | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: linux-zip-package | |
| path: dist/linux | |
| - name: Check download result | |
| run: ls -R dist | |
| - name: Download Windows .exe Artifact | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: windows-exe-package | |
| path: dist/windows | |
| - name: Check download result | |
| run: ls -R dist | |
| - name: Download Windows .zip Artifact | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: windows-zip-package | |
| path: dist/windows | |
| - name: Check download result | |
| run: ls -R dist | |
| - name: Download macOS Artifact | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: macos-package | |
| path: dist/macos | |
| - name: Check download result | |
| run: ls -R dist | |
| - name: Download macOS Intel Artifact | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: macos-intel-package | |
| path: dist/macos-intel | |
| - name: Check download result | |
| run: ls -R dist | |
| - name: Create Release | |
| run: | | |
| gh release create "${{ github.ref_name }}" \ | |
| --title "${{ github.ref_name }}" \ | |
| --notes "" \ | |
| --draft=false \ | |
| --prerelease=false | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Find .deb File | |
| id: find_deb | |
| run: | | |
| # 查找 .deb 文件 | |
| DEB_FILE=$(find dist/linux -type f -name "*.deb" | head -n 1) | |
| if [ -z "$DEB_FILE" ]; then | |
| echo "No .deb file found!" | |
| exit 1 | |
| fi | |
| echo "DEB_FILE=$DEB_FILE" >> $GITHUB_ENV | |
| DEB_NAME=$(basename "$DEB_FILE") | |
| echo "DEB_NAME=$DEB_NAME" >> $GITHUB_ENV | |
| - name: Upload Linux .deb Artifact | |
| uses: actions/upload-release-asset@v1 | |
| with: | |
| upload_url: ${{ steps.create_release.outputs.upload_url }} | |
| asset_path: ${{ env.DEB_FILE }} | |
| asset_name: ${{ env.DEB_NAME }} | |
| asset_content_type: application/vnd.debian.binary-package | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Find .rpm File | |
| id: find_rpm | |
| run: | | |
| # 查找 .rpm 文件 | |
| RPM_FILE=$(find dist/linux -type f -name "*.rpm" | head -n 1) | |
| if [ -z "$RPM_FILE" ]; then | |
| echo "No .rpm file found!" | |
| exit 1 | |
| fi | |
| echo "RPM_FILE=$RPM_FILE" >> $GITHUB_ENV | |
| RPM_NAME=$(basename "$RPM_FILE") | |
| echo "RPM_NAME=$RPM_NAME" >> $GITHUB_ENV | |
| - name: Upload Linux .rpm Artifact | |
| uses: actions/upload-release-asset@v1 | |
| with: | |
| upload_url: ${{ steps.create_release.outputs.upload_url }} | |
| asset_path: ${{ env.RPM_FILE }} | |
| asset_name: ${{ env.RPM_NAME }} | |
| asset_content_type: application/x-rpm | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Find linux .zip File | |
| id: find_linux_zip | |
| run: | | |
| # 查找 .zip 文件 | |
| LINUX_ZIP_FILE=$(find dist/linux -type f -name "*.zip" | head -n 1) | |
| if [ -z "$LINUX_ZIP_FILE" ]; then | |
| echo "No .zip file found!" | |
| exit 1 | |
| fi | |
| echo "LINUX_ZIP_FILE=$LINUX_ZIP_FILE" >> $GITHUB_ENV | |
| LINUX_ZIP_NAME=$(basename "$LINUX_ZIP_FILE") | |
| echo "LINUX_ZIP_NAME=$LINUX_ZIP_NAME" >> $GITHUB_ENV | |
| - name: Upload Linux .zip Artifact | |
| uses: actions/upload-release-asset@v1 | |
| with: | |
| upload_url: ${{ steps.create_release.outputs.upload_url }} | |
| asset_path: ${{ env.LINUX_ZIP_FILE }} | |
| asset_name: ${{ env.LINUX_ZIP_NAME }} | |
| asset_content_type: application/zip | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Find .exe File | |
| id: find_exe | |
| run: | | |
| $EXE_FILE = Get-ChildItem -Path "dist/windows" -Recurse -Filter "*.exe" | Select-Object -First 1 | |
| if ($null -eq $EXE_FILE) { | |
| Write-Host "No .exe file found!" | |
| exit 1 | |
| } | |
| # 获取文件路径 | |
| $EXE_FILE_PATH = $EXE_FILE.FullName | |
| # 使用 Split-Path 获取文件名 | |
| $EXE_FILE_NAME = Split-Path -Leaf $EXE_FILE_PATH | |
| Write-Host "EXE_FILE_NAME=$EXE_FILE_NAME" | |
| echo "EXE_FILE_NAME=$EXE_FILE_NAME" >> $env:GITHUB_ENV | |
| echo "EXE_FILE_PATH=$EXE_FILE_PATH" >> $env:GITHUB_ENV | |
| shell: pwsh | |
| - name: Upload Windows .exe Artifact | |
| uses: actions/upload-release-asset@v1 | |
| with: | |
| upload_url: ${{ steps.create_release.outputs.upload_url }} | |
| asset_path: ${{ env.EXE_FILE_PATH }} | |
| asset_name: ${{ env.EXE_FILE_NAME }} | |
| asset_content_type: application/octet-stream | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Find windows .zip File | |
| id: find_windows_zip | |
| run: | | |
| $WIN_ZIP_FILE = Get-ChildItem -Path "dist/windows" -Recurse -Filter "*.zip" | Select-Object -First 1 | |
| if ($null -eq $WIN_ZIP_FILE) { | |
| Write-Host "No .zip file found!" | |
| exit 1 | |
| } | |
| # 获取文件路径 | |
| $WIN_ZIP_FILE_PATH = $WIN_ZIP_FILE.FullName | |
| # 使用 Split-Path 获取文件名 | |
| $WIN_ZIP_FILE_NAME = Split-Path -Leaf $WIN_ZIP_FILE_PATH | |
| Write-Host "WIN_ZIP_FILE_NAME=$WIN_ZIP_FILE_NAME" | |
| echo "WIN_ZIP_FILE_NAME=$WIN_ZIP_FILE_NAME" >> $env:GITHUB_ENV | |
| echo "WIN_ZIP_FILE_PATH=$WIN_ZIP_FILE_PATH" >> $env:GITHUB_ENV | |
| shell: pwsh | |
| - name: Upload Windows .zip Artifact | |
| uses: actions/upload-release-asset@v1 | |
| with: | |
| upload_url: ${{ steps.create_release.outputs.upload_url }} | |
| asset_path: ${{ env.WIN_ZIP_FILE_PATH }} | |
| asset_name: ${{ env.WIN_ZIP_FILE_NAME }} | |
| asset_content_type: application/zip | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Find .app File | |
| id: find_macos_m1_app | |
| run: | | |
| # 查找 .zip 文件 | |
| MACOS_FILE=$(find dist/macos -type f -name "*.zip" | head -n 1) | |
| if [ -z "$MACOS_FILE" ]; then | |
| echo "No .zip file found!" | |
| exit 1 | |
| fi | |
| echo "MACOS_FILE=$MACOS_FILE" >> $GITHUB_ENV | |
| MACOS_NAME=$(basename "$MACOS_FILE") | |
| echo "MACOS_NAME=$MACOS_NAME" >> $GITHUB_ENV | |
| - name: Upload macOS Artifact | |
| uses: actions/upload-release-asset@v1 | |
| with: | |
| upload_url: ${{ steps.create_release.outputs.upload_url }} | |
| asset_path: ${{ env.MACOS_FILE }} | |
| asset_name: ${{ env.MACOS_NAME }} | |
| asset_content_type: application/zip | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Find .app(intel) File | |
| id: find_macos_intel_app | |
| run: | | |
| # 查找 .zip 文件 | |
| MACOS_INTEL_FILE=$(find dist/macos-intel -type f -name "*.zip" | head -n 1) | |
| if [ -z "$MACOS_INTEL_FILE" ]; then | |
| echo "No .zip file found!" | |
| exit 1 | |
| fi | |
| echo "MACOS_INTEL_FILE=$MACOS_INTEL_FILE" >> $GITHUB_ENV | |
| MACOS_INTEL_NAME=$(basename "$MACOS_INTEL_FILE") | |
| echo "MACOS_INTEL_NAME=$MACOS_INTEL_NAME" >> $GITHUB_ENV | |
| - name: Upload macOS Artifact | |
| uses: actions/upload-release-asset@v1 | |
| with: | |
| upload_url: ${{ steps.create_release.outputs.upload_url }} | |
| asset_path: ${{ env.MACOS_INTEL_FILE }} | |
| asset_name: ${{ env.MACOS_INTEL_NAME }} | |
| asset_content_type: application/zip | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |