kunkun/.github/workflows/beta-build.yml
Huakun Shen 9a2f298c6a Remove CFLAGS for C11 standard from beta build workflow
This change eliminates the CFLAGS environment variable previously set for C11 standard compliance in the beta build process, streamlining the build configuration.
2025-04-03 16:38:34 -04:00

271 lines
9.5 KiB
YAML

name: Build Beta
on:
schedule:
- cron: "22 22 * * *"
pull_request:
branches:
- develop
workflow_dispatch:
inputs:
updater:
description: "Enable updater?"
required: true
type: boolean
default: false
platform_windows:
description: "windows"
required: true
type: boolean
default: false
platform_linux:
description: "linux"
required: true
type: boolean
default: false
platform_macos_aarch64:
description: "macos-aarch64"
required: true
type: boolean
default: false
platform_macos_x86_64:
description: "macos-x86_64"
required: true
type: boolean
default: false
isDebug:
description: "is debug?"
required: true
type: boolean
default: false
retention_days:
description: "Artifacts retention time (days)"
required: true
type: string
default: "1"
jobs:
preprocess:
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.setting.outputs.matrix }}
build_mode: ${{ steps.setting.outputs.build_mode }}
build_path: ${{ steps.setting.outputs.build_path }}
retention_days: ${{ steps.setting.outputs.retention_days }}
file_prefix: ${{ steps.filename.outputs.file_prefix }}
# build_time: ${{ steps.filename.outputs.build_time }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install yq
uses: mikefarah/yq@master
with:
cmd: yq -V
- name: Update tauri.conf.json
if: ${{ github.event_name != 'schedule' && !inputs.updater }}
run: yq -i '.bundle.active = false' src-tauri/tauri.conf.json
working-directory: apps/desktop
- name: Upload tauri-config
if: ${{ github.event_name != 'schedule' && !inputs.updater }}
uses: actions/upload-artifact@v4
with:
name: tauri-config
path: apps/desktop/src-tauri/tauri.conf.json
retention-days: 1
- name: Get file name
id: filename
working-directory: apps/desktop
run: |
productName=$(yq e -r '.productName' src-tauri/tauri.conf.json)
# ersion=$(yq e -r '.version' package.json)
# build_time=$(TZ=UTC-8 date +%y%m%d%H)
git_des=$(git describe --long --tags --always --dirty)
echo "file_prefix=${productName}_${git_des}" >> "$GITHUB_OUTPUT"
# echo "build_time=${build_time}" >> "$GITHUB_OUTPUT"
- name: Setting variable
id: setting
run: |
matrix=""
if [ "${{ github.event_name }}" == "schedule" ] || [ "${{ github.event_name }}" == "pull_request" ]; then
matrix="\"windows-latest\",\"ubuntu-22.04\",\"macos-14\",\"macos-13\""
build_mode=""
build_path="release"
retention_days='1'
else
if [ "${{ inputs.platform_windows }}" == "true" ]; then
matrix="${matrix}\"windows-latest\","
fi
if [ "${{ inputs.platform_linux }}" == "true" ]; then
matrix="${matrix}\"ubuntu-22.04\","
fi
if [ "${{ inputs.platform_macos_aarch64 }}" == "true" ]; then
matrix="${matrix}\"macos-14\","
fi
if [ "${{ inputs.platform_macos_x86_64 }}" == "true" ]; then
matrix="${matrix}\"macos-13\","
fi
if [ -z "${matrix}" ]; then
matrix="\"windows-latest\","
fi
matrix="${matrix%,}"
build_mode="${{ inputs.isDebug && '--debug' || '' }}"
build_path="${{ inputs.isDebug && 'debug' || 'release' }}"
retention_days="${{ inputs.retention_days }}"
fi
echo "matrix=[${matrix}]" >> "$GITHUB_OUTPUT"
echo "build_mode=${build_mode}" >> "$GITHUB_OUTPUT"
echo "build_path=${build_path}" >> "$GITHUB_OUTPUT"
echo "retention_days=${retention_days}" >> "$GITHUB_OUTPUT"
auto-build:
needs: preprocess
permissions:
contents: write
strategy:
fail-fast: false
matrix:
os: ${{ fromJson(needs.preprocess.outputs.matrix) }}
runs-on: ${{ matrix.os }}
env:
BUILD_MODE: ${{ needs.preprocess.outputs.build_mode }}
BUILD_PATH: ${{ needs.preprocess.outputs.build_path }}
RETENTION_DAYS: ${{ needs.preprocess.outputs.retention_days }}
FILE_PREFIX: ${{ needs.preprocess.outputs.file_prefix }}
# BUILD_TIME: ${{ needs.preprocess.outputs.build_time }}
NO_STRIP: true
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
submodules: "true"
- name: Download artifact
if: ${{ github.event_name != 'schedule' && !inputs.updater }}
uses: actions/download-artifact@v4
with:
name: tauri-config
path: src-tauri
- name: Install pnpm
uses: pnpm/action-setup@v3
with:
version: latest
- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: pnpm
- uses: oven-sh/setup-bun@v1
with:
bun-version: 1.1.27
- name: Install protobuf (Mac)
if: startsWith(matrix.os, 'macos')
run: |
brew install protobuf
- name: Install protoc and openssl for windows
if: matrix.os == 'windows-latest'
run: |
choco install protoc
choco install openssl
echo OPENSSL_DIR='"C:\\Program Files\\OpenSSL-Win64"' >> $env:GITHUB_ENV
echo OPENSSL_INCLUDE_DIR='"C:\\Program Files\\OpenSSL-Win64\\include"' >> $env:GITHUB_ENV
echo OPENSSL_LIB_DIR='"C:\\Program Files\\OpenSSL-Win64\\lib"' >> $env:GITHUB_ENV
- name: Install dependencies (ubuntu only)
if: matrix.os == 'ubuntu-22.04'
run: |
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libxdo-dev protobuf-compiler
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
# 那些目标仅在 macos 运行器上使用,因此将其置于 `if` 语句中,以稍微加快 Windows 和 Linux 的构建速度。
targets: ${{ startsWith(matrix.os, 'macos') && 'aarch64-apple-darwin,x86_64-apple-darwin' || '' }}
- name: Rust cache
uses: swatinem/rust-cache@v2
with:
workspaces: "./apps/desktop/src-tauri -> target"
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Prepare
run: pnpm prepare
- name: Build Packages
env:
NODE_OPTIONS: --max-old-space-size=4096
run: pnpm build
- name: Build the App
working-directory: apps/desktop
env:
CI: false
NODE_OPTIONS: --max-old-space-size=4096
run: pnpm tauri build ${{ env.BUILD_MODE}} ${{ matrix.os == 'windows-latest' && '-b nsis' || '' }}
- name: Rename macos-aarch64
if: matrix.os == 'macos-14'
run: mv target/${{ env.BUILD_PATH }}/bundle/dmg/*.dmg target/${{ env.BUILD_PATH }}/bundle/dmg/${{ env.FILE_PREFIX }}-aarch64.dmg
- name: Rename macos-x86_64
if: matrix.os == 'macos-13'
run: mv target/${{ env.BUILD_PATH }}/bundle/dmg/*.dmg target/${{ env.BUILD_PATH }}/bundle/dmg/${{ env.FILE_PREFIX }}-amd64.dmg
- name: Rename windows
if: matrix.os == 'windows-latest'
run: |
# mv target/${{ env.BUILD_PATH }}/bundle/msi/*.msi target/${{ env.BUILD_PATH }}/bundle/msi/${{ env.FILE_PREFIX }}-amd64.msi
mv target/${{ env.BUILD_PATH }}/bundle/nsis/*.exe target/${{ env.BUILD_PATH }}/bundle/nsis/${{ env.FILE_PREFIX }}-amd64.exe
- name: Rename linux
if: matrix.os == 'ubuntu-22.04'
run: |
mv target/${{ env.BUILD_PATH }}/bundle/deb/*.deb target/${{ env.BUILD_PATH }}/bundle/deb/${{ env.FILE_PREFIX }}-amd64.deb
mv target/${{ env.BUILD_PATH }}/bundle/rpm/*.rpm target/${{ env.BUILD_PATH }}/bundle/rpm/${{ env.FILE_PREFIX }}-amd64.rpm
mv target/${{ env.BUILD_PATH }}/bundle/appimage/*.AppImage target/${{ env.BUILD_PATH }}/bundle/appimage/${{ env.FILE_PREFIX }}-amd64.AppImage
- name: Upload artifacts (Windows)
if: matrix.os == 'windows-latest'
uses: actions/upload-artifact@v4
with:
name: ${{ env.FILE_PREFIX }}_windows-amd64
path: |
# target/${{ env.BUILD_PATH }}/bundle/msi/*.msi
target/${{ env.BUILD_PATH }}/bundle/nsis/*.exe
retention-days: ${{ env.RETENTION_DAYS}}
compression-level: 0
- name: Upload artifacts (MacOS)
if: startsWith(matrix.os, 'macos')
uses: actions/upload-artifact@v4
with:
name: ${{ env.FILE_PREFIX }}_${{ matrix.os == 'macos-14' && 'macos-aarch64' || 'macos-amd64' }}
path: target/${{ env.BUILD_PATH }}/bundle/dmg/*.dmg
retention-days: ${{ env.RETENTION_DAYS}}
compression-level: 0
- name: Upload artifacts (Linux)
if: matrix.os == 'ubuntu-22.04'
uses: actions/upload-artifact@v4
with:
name: ${{ env.FILE_PREFIX }}_linux-amd64
path: |
target/${{ env.BUILD_PATH }}/bundle/deb/*.deb
target/${{ env.BUILD_PATH }}/bundle/rpm/*.rpm
target/${{ env.BUILD_PATH }}/bundle/appimage/*.AppImage
retention-days: ${{ env.RETENTION_DAYS}}
compression-level: 0