diff --git a/.github/workflows/beta-build.yml b/.github/workflows/beta-build.yml new file mode 100644 index 0000000..4fbe826 --- /dev/null +++ b/.github/workflows/beta-build.yml @@ -0,0 +1,270 @@ +name: Build Beta Package + +on: + schedule: + - cron: "22 22 * * *" + workflow_dispatch: + inputs: + updater: + description: "Enable updater?" + required: true + type: boolean + default: true + platform_windows: + description: "windows" + required: true + type: boolean + default: true + 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" ]; then + matrix="\"windows-latest\",\"ubuntu-22.04\",\"macos-14\",\"macos-12\"" + 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-12\"," + 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 }} + TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }} + TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }} + 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 and Protobuf (Ubuntu) + if: matrix.os == 'ubuntu-22.04' + run: | + sudo apt install -y protobuf-compiler + - 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 + + - 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 + run: pnpm build + + - name: Build the app (Windows) + working-directory: apps/desktop + env: + CI: false + 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-12' + 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 diff --git a/.github/workflows/desktop-publish.yml b/.github/workflows/desktop-publish.yml new file mode 100644 index 0000000..c83d642 --- /dev/null +++ b/.github/workflows/desktop-publish.yml @@ -0,0 +1,110 @@ +name: "Desktop App Publish" + +on: + push: + tags: + - "v*" + workflow_dispatch: + +jobs: + publish-tauri: + permissions: + contents: write + strategy: + fail-fast: false + matrix: + settings: + - platform: "macos-14" # for Arm based macs (M1 and above). + args: "--target aarch64-apple-darwin --verbose" + - platform: "macos-14" # for Intel based macs. + args: "--target x86_64-apple-darwin --verbose" + - platform: "macos-14" # for Both Arm and Intel based macs. + args: "--target universal-apple-darwin --verbose" + - platform: "ubuntu-22.04" # for Tauri v1 you could replace this with ubuntu-20.04. + args: "--verbose" + - platform: "windows-latest" + args: "--verbose" + + runs-on: ${{ matrix.settings.platform }} + steps: + - uses: actions/checkout@v4 + with: + submodules: "true" + + - name: install dependencies (ubuntu only) + if: matrix.settings.platform == 'ubuntu-22.04' # This must match the platform value defined above. + run: | + sudo apt-get update + sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf + # You can remove the one that doesn't apply to your app to speed up the workflow a bit. + - name: Install protobuf (Mac) + if: matrix.settings.platform == 'macos-14' + run: | + brew install protobuf + - name: Install Protobuf (Ubuntu) + if: matrix.settings.platform == 'ubuntu-22.04' + run: | + sudo apt install -y protobuf-compiler + - name: Install protoc and openssl for windows + if: matrix.settings.platform == '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 + - uses: pnpm/action-setup@v4 + - name: setup node + uses: actions/setup-node@v4 + with: + node-version: lts/* + cache: "pnpm" # Set this to npm, yarn or pnpm. + cache-dependency-path: ./pnpm-lock.yaml + + - name: Install Rust stable + uses: dtolnay/rust-toolchain@stable + with: + # Those targets are only used on macos runners so it's in an `if` to slightly speed up windows and linux builds. + targets: ${{ matrix.settings.platform == 'macos-14' && 'aarch64-apple-darwin,x86_64-apple-darwin' || '' }} + - name: Add rust target (macos only) + if: matrix.settings.platform == 'macos-14' + run: | + rustup target add aarch64-apple-darwin + rustup target add x86_64-apple-darwin + - name: Rust cache + uses: swatinem/rust-cache@v2 + with: + workspaces: "./apps/desktop/src-tauri -> target" + - uses: oven-sh/setup-bun@v1 + with: + bun-version: 1.1.27 + - name: Install Dependencies + # If you don't have `beforeBuildCommand` configured you may want to build your frontend here too. + run: | + pnpm install + pnpm prepare + - name: Get App Version + if: matrix.settings.platform == 'windows-latest' + id: appversion + run: | + echo "version=$(node -p "require('./apps/desktop/package.json').version")" >> $env:GITHUB_OUTPUT + - uses: tauri-apps/tauri-action@v0 + env: + CI: false + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }} + APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }} + APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }} + APPLE_ID: ${{ secrets.APPLE_ID }} + APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }} + APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} + TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }} + TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }} + with: + tagName: Kunkun-v__VERSION__ # the action automatically replaces \_\_VERSION\_\_ with the app version. + releaseName: "Kunkun v__VERSION__" + releaseBody: "See the assets to download this version and install." + releaseDraft: true + prerelease: false + args: ${{ matrix.settings.args }} ${{ contains(steps.appversion.outputs.version, 'beta') && matrix.settings.platform == 'windows-latest' && '-b nsis' || '' }} + projectPath: "./apps/desktop"