build-linux-arm-appimage.yml 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. name: CI 自动构建linux arm electron 包,并保存结果
  2. on:
  3. push:
  4. branches:
  5. - master
  6. repository_dispatch:
  7. types:
  8. - webhook_trigger
  9. # 并发控制:自动取消旧的运行
  10. concurrency:
  11. group: build-linux-arm-${{ github.ref }}
  12. cancel-in-progress: true
  13. jobs:
  14. build-h5-production:
  15. runs-on: [self-hosted,ARM64]
  16. steps:
  17. - name: 检出代码
  18. uses: actions/checkout@v4
  19. - name: 设置 Node.js 环境
  20. uses: actions/setup-node@v4
  21. with:
  22. node-version: '20'
  23. - name: 安装依赖
  24. run: npm install --force
  25. - name: 构建 H5 (生产环境)
  26. env:
  27. GH_TOKEN: ${{ secrets.GH_TOKEN }}
  28. TARO_API_URL: 'http://localhost:6001'
  29. TARO_MQTT_URL: 'ws://localhost:8083/mqtt'
  30. run: |
  31. echo "当前操作系统平台: $(uname -s)"
  32. echo "当前CPU架构: $(uname -m)"
  33. if [ "$(uname -s)" = "Linux" ] && [ "$(uname -m)" = "aarch64" ]; then
  34. echo "复制arm平台必须构建文件taro.linux-arm64-gnu.node到目标位置"
  35. cp .build/taro.linux-arm64-gnu.node node_modules/@tarojs/binding/taro.linux-arm64-gnu.node
  36. echo "复制完成"
  37. fi
  38. node .build/h5_for_production.js
  39. - name: 复制构建结果到部署目录
  40. run: |
  41. echo "开始复制构建结果..."
  42. mkdir -p /home/ccos/dros/linux-arm64-unpacked/h5
  43. rsync -av --delete dist/h5/ /home/ccos/dros/linux-arm64-unpacked/h5/
  44. echo "✅ 文件已成功复制到 /home/ccos/dros/linux-arm64-unpacked/h5"
  45. # build-pkg:
  46. # needs: deploy-h5-production
  47. # runs-on: self-hosted
  48. # steps:
  49. # - name: 检出代码
  50. # uses: actions/checkout@v4
  51. # - name: 设置 Node.js 环境(PKG 需要 Node 18)
  52. # uses: actions/setup-node@v4
  53. # with:
  54. # node-version: '18'
  55. # - name: 安装依赖
  56. # run: npm install --force
  57. # - name: 构建 PKG
  58. # run: npm run pkg
  59. build-android:
  60. runs-on: [self-hosted, win-android]
  61. defaults:
  62. run:
  63. shell: cmd # 全局切换到 cmd shell
  64. steps:
  65. - name: 检出代码
  66. uses: actions/checkout@v4
  67. # - name: Check Android SDK on Windows (cmd)
  68. # shell: cmd
  69. # env:
  70. # ANDROID_SDK_ROOT: 'C:\Users\ddx\AppData\Local\Android\Sdk' # <-- 修改为你的 SDK 安装路径
  71. # JAVA_HOME: 'C:\Program Files\Eclipse Adoptium\jdk-17.0.16.8-hotspot\' # <-- 修改为你的 JDK 路径
  72. # PATH: ${{ env.PATH }}';C:\Android\sdk\platform-tools;C:\Android\sdk\cmdline-tools\latest\bin'
  73. # run: |
  74. # echo USER: %USERNAME%
  75. # echo ANDROID_SDK_ROOT: %ANDROID_SDK_ROOT%
  76. - name: 设置 Node.js 环境
  77. uses: actions/setup-node@v4
  78. with:
  79. node-version: '22'
  80. - name: 安装依赖
  81. run: npm install --force --registry=https://registry.npmmirror.com/
  82. - name: 构建h5
  83. run: node .build/h5_for_production.js
  84. - name: Set up JDK 17
  85. uses: actions/setup-java@v4
  86. with:
  87. java-version: '17'
  88. distribution: 'temurin'
  89. - name: 手动安装 Android SDK (Windows)
  90. if: runner.os == 'Windows'
  91. shell: powershell
  92. run: |
  93. $url = "https://dl.google.com/android/repository/commandlinetools-win-11076708_latest.zip"
  94. $output = "$env:TEMP\cmdtools.zip"
  95. # 检查是否有代理设置
  96. if ($env:HTTP_PROXY -or $env:HTTPS_PROXY) {
  97. $proxy = if ($env:HTTPS_PROXY) { $env:HTTPS_PROXY } else { $env:HTTP_PROXY }
  98. Write-Host "使用代理: $proxy"
  99. Invoke-WebRequest -Uri $url -OutFile $output -Proxy $proxy -ProxyUseDefaultCredentials
  100. } else {
  101. Write-Host "直接连接(无代理)"
  102. Invoke-WebRequest -Uri $url -OutFile $output
  103. }
  104. $sdkRoot = "C:\android-sdk"
  105. $cmdlineTools = "$sdkRoot\cmdline-tools\latest"
  106. New-Item -ItemType Directory -Force -Path $cmdlineTools
  107. Expand-Archive -Path $output -DestinationPath $cmdlineTools -Force
  108. echo "ANDROID_HOME=$sdkRoot" >> $env:GITHUB_ENV
  109. echo "ANDROID_SDK_ROOT=$sdkRoot" >> $env:GITHUB_ENV
  110. & "$cmdlineTools\bin\sdkmanager.bat" --install "platforms;android-35" "build-tools;35.0.0" --sdk_root=$sdkRoot
  111. echo y | & "$cmdlineTools\bin\sdkmanager.bat" --licenses --sdk_root=$sdkRoot
  112. - name: 手动安装 Android SDK (Linux)
  113. if: runner.os == 'Linux'
  114. shell: bash
  115. run: |
  116. # 下载 Linux 版本的 command line tools
  117. wget https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip -O /tmp/cmdtools.zip
  118. # 解压
  119. SDK_ROOT=$HOME/android-sdk
  120. mkdir -p $SDK_ROOT/cmdline-tools/latest
  121. unzip -q /tmp/cmdtools.zip -d $SDK_ROOT/cmdline-tools/latest
  122. # 设置环境变量
  123. echo "ANDROID_HOME=$SDK_ROOT" >> $GITHUB_ENV
  124. echo "ANDROID_SDK_ROOT=$SDK_ROOT" >> $GITHUB_ENV
  125. # 安装包
  126. yes | $SDK_ROOT/cmdline-tools/latest/bin/sdkmanager --install "platforms;android-35" "build-tools;35.0.0" --sdk_root=$SDK_ROOT
  127. yes | $SDK_ROOT/cmdline-tools/latest/bin/sdkmanager --licenses --sdk_root=$SDK_ROOT
  128. - name: Cache Android SDK # 新增:缓存 SDK,避免每次下载
  129. uses: actions/cache@v4
  130. with:
  131. path: |
  132. %LOCALAPPDATA%\Android\Sdk # 备选用户目录
  133. key: android-sdk-${{ runner.os }}-${{ hashFiles('**/*.xml') }} # 基于项目文件 hash
  134. - name: Set up Node.js (for Cordova)
  135. uses: actions/setup-node@v4
  136. with:
  137. node-version: '20'
  138. cache: 'npm' # 缓存 npm 依赖
  139. - name: Install Cordova globally
  140. run: npm install -g cordova@latest --no-optional
  141. shell: pwsh # 显式指定 PowerShell,确保兼容
  142. - name: Add Cordova Android platform 14.0.1
  143. run: |
  144. cordova platform add android@14.0.1 --save
  145. cordova requirements android # 检查环境(PowerShell 会自动处理路径)
  146. - name: Verify Environment Variables (PowerShell)
  147. run: |
  148. Write-Output "JAVA_HOME: $env:JAVA_HOME"
  149. Write-Output "ANDROID_HOME: $env:ANDROID_HOME"
  150. Write-Output "PATH includes Gradle: $(if ($env:PATH -like '*gradle*') { 'Yes' } else { 'No' })"
  151. - name: Update Gradle Wrapper to 9.0
  152. run: |
  153. # PowerShell 语法更新 wrapper
  154. (Get-Content gradle/wrapper/gradle-wrapper.properties) -replace 'gradle-[0-9]+\.[0-9]+-bin\.zip', 'gradle-9.0-bin.zip' | Set-Content gradle/wrapper/gradle-wrapper.properties
  155. # 确保 gradlew 可执行(Windows 上是 .bat)
  156. if (Test-Path 'gradlew.bat') { Write-Output "Gradle wrapper ready" }
  157. - name: 构建 Android APK
  158. run: npm run build:android