name: CI 自动构建linux arm electron 包,并保存结果 on: push: branches: - master repository_dispatch: types: - webhook_trigger # 并发控制:自动取消旧的运行 concurrency: group: build-linux-arm-${{ github.ref }} cancel-in-progress: true jobs: build-h5-production: runs-on: [self-hosted,ARM64] steps: - name: 检出代码 uses: actions/checkout@v4 - name: 设置 Node.js 环境 uses: actions/setup-node@v4 with: node-version: '20' - name: 安装依赖 run: npm install --force - name: 构建 H5 (生产环境) env: GH_TOKEN: ${{ secrets.GH_TOKEN }} TARO_API_URL: 'http://localhost:6001' TARO_MQTT_URL: 'ws://localhost:8083/mqtt' run: | echo "当前操作系统平台: $(uname -s)" echo "当前CPU架构: $(uname -m)" if [ "$(uname -s)" = "Linux" ] && [ "$(uname -m)" = "aarch64" ]; then echo "复制arm平台必须构建文件taro.linux-arm64-gnu.node到目标位置" cp .build/taro.linux-arm64-gnu.node node_modules/@tarojs/binding/taro.linux-arm64-gnu.node echo "复制完成" fi node .build/h5_for_production.js - name: 复制构建结果到部署目录 run: | echo "开始复制构建结果..." mkdir -p /home/ccos/dros/linux-arm64-unpacked/h5 rsync -av --delete dist/h5/ /home/ccos/dros/linux-arm64-unpacked/h5/ echo "✅ 文件已成功复制到 /home/ccos/dros/linux-arm64-unpacked/h5" # build-pkg: # needs: deploy-h5-production # runs-on: self-hosted # steps: # - name: 检出代码 # uses: actions/checkout@v4 # - name: 设置 Node.js 环境(PKG 需要 Node 18) # uses: actions/setup-node@v4 # with: # node-version: '18' # - name: 安装依赖 # run: npm install --force # - name: 构建 PKG # run: npm run pkg build-android: runs-on: [self-hosted, win-android] defaults: run: shell: cmd # 全局切换到 cmd shell steps: - name: 检出代码 uses: actions/checkout@v4 # - name: Check Android SDK on Windows (cmd) # shell: cmd # env: # ANDROID_SDK_ROOT: 'C:\Users\ddx\AppData\Local\Android\Sdk' # <-- 修改为你的 SDK 安装路径 # JAVA_HOME: 'C:\Program Files\Eclipse Adoptium\jdk-17.0.16.8-hotspot\' # <-- 修改为你的 JDK 路径 # PATH: ${{ env.PATH }}';C:\Android\sdk\platform-tools;C:\Android\sdk\cmdline-tools\latest\bin' # run: | # echo USER: %USERNAME% # echo ANDROID_SDK_ROOT: %ANDROID_SDK_ROOT% - name: 设置 Node.js 环境 uses: actions/setup-node@v4 with: node-version: '22' - name: 手动安装 Android SDK (Windows) ############为了早点调试到 if: runner.os == 'Windows' shell: powershell run: | $url = "https://dl.google.com/android/repository/commandlinetools-win-11076708_latest.zip" $output = "$env:TEMP\cmdtools.zip" # 检查是否有代理设置 if ($env:HTTP_PROXY -or $env:HTTPS_PROXY) { $proxy = if ($env:HTTPS_PROXY) { $env:HTTPS_PROXY } else { $env:HTTP_PROXY } Write-Host "使用代理: $proxy" Invoke-WebRequest -Uri $url -OutFile $output -Proxy $proxy -ProxyUseDefaultCredentials } else { Write-Host "直接连接(无代理)" Invoke-WebRequest -Uri $url -OutFile $output } $sdkRoot = "C:\android-sdk" $cmdlineTools = "$sdkRoot\cmdline-tools\latest" New-Item -ItemType Directory -Force -Path $cmdlineTools Expand-Archive -Path $output -DestinationPath $cmdlineTools -Force echo "ANDROID_HOME=$sdkRoot" >> $env:GITHUB_ENV echo "ANDROID_SDK_ROOT=$sdkRoot" >> $env:GITHUB_ENV # 使用数组参数避免字符串解析问题 $sdkManager = Join-Path $cmdlineTools "bin\sdkmanager.bat" & $sdkManager @("--install", "platforms;android-35", "build-tools;35.0.0", "--sdk_root=$sdkRoot") echo y | & $sdkManager @("--licenses", "--sdk_root=$sdkRoot") - name: 安装依赖 run: npm install --force --registry=https://registry.npmmirror.com/ - name: 构建h5 run: node .build/h5_for_production.js - name: Set up JDK 17 uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin' - name: 手动安装 Android SDK (Linux) if: runner.os == 'Linux' shell: bash run: | # 下载 Linux 版本的 command line tools wget https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip -O /tmp/cmdtools.zip # 解压 SDK_ROOT=$HOME/android-sdk mkdir -p $SDK_ROOT/cmdline-tools/latest unzip -q /tmp/cmdtools.zip -d $SDK_ROOT/cmdline-tools/latest # 设置环境变量 echo "ANDROID_HOME=$SDK_ROOT" >> $GITHUB_ENV echo "ANDROID_SDK_ROOT=$SDK_ROOT" >> $GITHUB_ENV # 安装包 yes | $SDK_ROOT/cmdline-tools/latest/bin/sdkmanager --install "platforms;android-35" "build-tools;35.0.0" --sdk_root=$SDK_ROOT yes | $SDK_ROOT/cmdline-tools/latest/bin/sdkmanager --licenses --sdk_root=$SDK_ROOT - name: Cache Android SDK # 新增:缓存 SDK,避免每次下载 uses: actions/cache@v4 with: path: | %LOCALAPPDATA%\Android\Sdk # 备选用户目录 key: android-sdk-${{ runner.os }}-${{ hashFiles('**/*.xml') }} # 基于项目文件 hash - name: Set up Node.js (for Cordova) uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' # 缓存 npm 依赖 - name: Install Cordova globally run: npm install -g cordova@latest --no-optional shell: pwsh # 显式指定 PowerShell,确保兼容 - name: Add Cordova Android platform 14.0.1 run: | cordova platform add android@14.0.1 --save cordova requirements android # 检查环境(PowerShell 会自动处理路径) - name: Verify Environment Variables (PowerShell) run: | Write-Output "JAVA_HOME: $env:JAVA_HOME" Write-Output "ANDROID_HOME: $env:ANDROID_HOME" Write-Output "PATH includes Gradle: $(if ($env:PATH -like '*gradle*') { 'Yes' } else { 'No' })" - name: Update Gradle Wrapper to 9.0 run: | # PowerShell 语法更新 wrapper (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 # 确保 gradlew 可执行(Windows 上是 .bat) if (Test-Path 'gradlew.bat') { Write-Output "Gradle wrapper ready" } - name: 构建 Android APK run: npm run build:android