release.yml 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. name: Release Build
  2. on:
  3. workflow_dispatch:
  4. push:
  5. tags:
  6. - v**
  7. env:
  8. CARGO_INCREMENTAL: 0
  9. RUST_BACKTRACE: short
  10. jobs:
  11. release:
  12. strategy:
  13. fail-fast: false
  14. matrix:
  15. include:
  16. - os: windows-latest
  17. target: x86_64-pc-windows-msvc
  18. # - os: windows-latest
  19. # target: aarch64-pc-windows-msvc
  20. - os: macos-latest
  21. target: aarch64-apple-darwin
  22. - os: macos-latest
  23. target: x86_64-apple-darwin
  24. - os: ubuntu-latest
  25. target: x86_64-unknown-linux-gnu
  26. - os: ubuntu-latest
  27. target: aarch64-unknown-linux-gnu
  28. runs-on: ${{ matrix.os }}
  29. if: startsWith(github.repository, 'wonfen')
  30. steps:
  31. - name: Checkout Repository
  32. uses: actions/checkout@v4
  33. - name: Install Rust Stable
  34. uses: dtolnay/rust-toolchain@stable
  35. - name: Add Rust Target
  36. run: |
  37. rustup target add ${{ matrix.target }}
  38. - name: Rust Cache
  39. uses: Swatinem/rust-cache@v2
  40. with:
  41. workspaces: src-tauri
  42. - name: Install Node
  43. uses: actions/setup-node@v4
  44. with:
  45. node-version: "20"
  46. - uses: pnpm/action-setup@v2
  47. name: Install pnpm
  48. with:
  49. version: 8
  50. run_install: false
  51. - name: Install Dependencies (Ubuntu Only)
  52. if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.target,'x86_64')
  53. run: |
  54. sudo apt-get update
  55. sudo apt-get install -y libgtk-3-dev webkit2gtk-4.0 libayatana-appindicator3-dev librsvg2-dev patchelf openssl
  56. - name: Install Dependencies (Ubuntu Only)
  57. if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.target,'aarch64')
  58. run: |
  59. sed 's/mirror+file:\/etc\/apt\/apt-mirrors.txt/[arch-=amd64,i386] http:\/\/ports.ubuntu.com\/ubuntu-ports\//g' /etc/apt/sources.list | sudo tee /etc/apt/sources.list.d/ports.list
  60. sudo sed -i 's/mirror+file/[arch=amd64,i386] mirror+file/g' /etc/apt/sources.list
  61. cat /etc/apt/sources.list
  62. cat /etc/apt/sources.list.d/ports.list
  63. sudo dpkg --add-architecture arm64
  64. sudo apt-get update
  65. sudo apt-get install -y libncurses6:arm64 libtinfo6:arm64 linux-libc-dev:arm64 libncursesw6:arm64 libssl3:arm64 libcups2:arm64
  66. sudo apt-get install -y --no-install-recommends g++-aarch64-linux-gnu libc6-dev-arm64-cross libssl-dev:arm64 libwebkit2gtk-4.0-dev:arm64 libgtk-3-dev:arm64 patchelf:arm64 librsvg2-dev:arm64 libayatana-appindicator3-dev:arm64
  67. - name: Pnpm install and check
  68. run: |
  69. pnpm i
  70. pnpm check ${{ matrix.target }}
  71. - name: Tauri build
  72. if: startsWith(matrix.os, 'windows') || startsWith(matrix.os,'macos') || startsWith(matrix.target,'x86_64')
  73. uses: tauri-apps/tauri-action@v0
  74. env:
  75. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  76. TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
  77. TAURI_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
  78. with:
  79. tagName: v__VERSION__
  80. releaseName: "Clash Verge v__VERSION__"
  81. releaseBody: "More new features are now supported."
  82. releaseDraft: false
  83. prerelease: false
  84. tauriScript: pnpm
  85. args: -f default-meta --target ${{ matrix.target }}
  86. - name: Tauri build (Ubuntu Arm64)
  87. if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.target,'aarch64')
  88. uses: tauri-apps/tauri-action@v0
  89. env:
  90. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  91. TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
  92. TAURI_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
  93. CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc
  94. CC_aarch64_unknown_linux_gnu: aarch64-linux-gnu-gcc
  95. CXX_aarch64_unknown_linux_gnu: aarch64-linux-gnu-g++
  96. PKG_CONFIG_PATH: /usr/lib/aarch64-linux-gnu/pkgconfig
  97. PKG_CONFIG_ALLOW_CROSS: 1
  98. with:
  99. tagName: v__VERSION__
  100. releaseName: "Clash Verge v__VERSION__"
  101. releaseBody: "More new features are now supported."
  102. releaseDraft: false
  103. prerelease: false
  104. tauriScript: pnpm
  105. args: -f default-meta --target ${{ matrix.target }} -b deb,updater
  106. - name: Portable Bundle
  107. if: matrix.os == 'windows-latest'
  108. run: |
  109. pnpm portable
  110. env:
  111. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  112. TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
  113. TAURI_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
  114. VITE_WIN_PORTABLE: 1
  115. release-update:
  116. needs: [release]
  117. runs-on: ubuntu-latest
  118. if: |
  119. startsWith(github.repository, 'wonfen') &&
  120. startsWith(github.ref, 'refs/tags/v')
  121. steps:
  122. - name: Checkout repository
  123. uses: actions/checkout@v4
  124. - name: Install Node
  125. uses: actions/setup-node@v4
  126. with:
  127. node-version: "20"
  128. - uses: pnpm/action-setup@v2
  129. name: Install pnpm
  130. with:
  131. version: 8
  132. run_install: false
  133. - name: Pnpm install
  134. run: pnpm i
  135. - name: Release updater file
  136. run: pnpm updater
  137. env:
  138. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}