diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index f66f186..0000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,333 +0,0 @@ -name: Build and Release - -on: - push: - branches: [ main, master ] - tags: [ 'v*' ] - pull_request: - branches: [ main, master ] - workflow_dispatch: # 允许手动触发 - -env: - PROJECT_NAME: "myapp" - -jobs: - version-info: - runs-on: ubuntu-latest - outputs: - version: ${{ steps.get_version.outputs.version }} - git_commit: ${{ steps.get_git_info.outputs.commit }} - git_tag: ${{ steps.get_git_info.outputs.tag }} - - steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 0 # 获取完整的git历史,用于标签检测 - - - name: Get Git info - id: get_git_info - run: | - echo "commit=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT - if git describe --tags --exact-match HEAD 2>/dev/null; then - TAG=$(git describe --tags --exact-match HEAD) - echo "tag=${TAG}" >> $GITHUB_OUTPUT - echo "version=${TAG#v}" >> $GITHUB_OUTPUT - else - echo "tag=unknown" >> $GITHUB_OUTPUT - echo "version=0.0.0-dev+$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT - fi - - - name: Display version info - run: | - echo "Version: ${{ steps.get_git_info.outputs.version }}" - echo "Git Commit: ${{ steps.get_git_info.outputs.commit }}" - echo "Git Tag: ${{ steps.get_git_info.outputs.tag }}" - - build-linux: - needs: version-info - runs-on: ubuntu-latest - strategy: - matrix: - arch: [x86_64, aarch64] - build_type: [release, debug] - - steps: - - uses: actions/checkout@v3 - - - name: Install xmake - run: | - curl -fsSL https://xmake.io/shget.text | bash - echo "$HOME/.xmake/bin" >> $GITHUB_PATH - - - name: Build for Linux - run: | - # 更新版本号 - if [[ "${{ needs.version-info.outputs.version }}" != "0.0.0-dev"* ]]; then - sed -i "s/set_version(\"[^\"]*\")/set_version(\"${{ needs.version-info.outputs.version }}\")/" xmake.lua - fi - - # 配置并构建 - xmake f -p linux -a ${{ matrix.arch }} --mode=${{ matrix.build_type }} - xmake build -v - - # 显示构建信息 - xmake show - - - name: Run tests (if any) - run: | - if xmake -q test 2>/dev/null; then - xmake test - fi - - - name: Package Linux binaries - run: | - mkdir -p artifacts/linux-${{ matrix.arch }} - - # 复制可执行文件 - cp -r build/linux/${{ matrix.arch }}/${{ matrix.build_type }}/* artifacts/linux-${{ matrix.arch }}/ 2>/dev/null || true - - # 压缩 - cd artifacts - tar -czf linux-${{ matrix.arch }}-${{ matrix.build_type }}.tar.gz linux-${{ matrix.arch }}/ - - - name: Upload artifacts - uses: actions/upload-artifact@v3 - with: - name: linux-${{ matrix.arch }}-${{ matrix.build_type }} - path: artifacts/linux-${{ matrix.arch }}-${{ matrix.build_type }}.tar.gz - - build-windows: - needs: version-info - runs-on: windows-latest - strategy: - matrix: - arch: [x64, x86] - build_type: [release, debug] - - steps: - - uses: actions/checkout@v3 - - - name: Install xmake - run: | - Invoke-WebRequest https://xmake.io/psget.text -UseBasicParsing | Invoke-Expression - echo "$env:USERPROFILE\.xmake\bin" | Out-File -FilePath $env:GITHUB_PATH -Append - - - name: Build for Windows - run: | - # 更新版本号 - if ("${{ needs.version-info.outputs.version }}" -notmatch "^0\.0\.0-dev") { - $content = Get-Content xmake.lua -Raw - $content = $content -replace 'set_version\("[^"]*"\)', "set_version(`"${{ needs.version-info.outputs.version }}`")" - $content | Set-Content xmake.lua - } - - # 配置并构建 - xmake f -p windows -a ${{ matrix.arch }} --mode=${{ matrix.build_type }} - xmake build -v - - - name: Package Windows binaries - run: | - New-Item -ItemType Directory -Force -Path artifacts\windows-${{ matrix.arch }} - - # 复制可执行文件 - Copy-Item -Path "build\windows\${{ matrix.arch }}\${{ matrix.build_type }}\*.exe" -Destination "artifacts\windows-${{ matrix.arch }}\" -ErrorAction SilentlyContinue - Copy-Item -Path "build\windows\${{ matrix.arch }}\${{ matrix.build_type }}\*.dll" -Destination "artifacts\windows-${{ matrix.arch }}\" -ErrorAction SilentlyContinue - - # 压缩 - Compress-Archive -Path "artifacts\windows-${{ matrix.arch }}\*" -DestinationPath "artifacts\windows-${{ matrix.arch }}-${{ matrix.build_type }}.zip" - - - name: Upload artifacts - uses: actions/upload-artifact@v3 - with: - name: windows-${{ matrix.arch }}-${{ matrix.build_type }} - path: artifacts/windows-${{ matrix.arch }}-${{ matrix.build_type }}.zip - - build-macos: - needs: version-info - runs-on: macos-latest - strategy: - matrix: - arch: [x86_64, arm64] - build_type: [release, debug] - - steps: - - uses: actions/checkout@v3 - - - name: Install xmake - run: | - curl -fsSL https://xmake.io/shget.text | bash - echo "$HOME/.xmake/bin" >> $GITHUB_PATH - - - name: Build for macOS - run: | - # 更新版本号 - if [[ "${{ needs.version-info.outputs.version }}" != "0.0.0-dev"* ]]; then - sed -i "s/set_version(\"[^\"]*\")/set_version(\"${{ needs.version-info.outputs.version }}\")/" xmake.lua - fi - - # 配置并构建 - xmake f -p macosx -a ${{ matrix.arch }} --mode=${{ matrix.build_type }} - xmake build -v - - - name: Package macOS binaries - run: | - mkdir -p artifacts/macos-${{ matrix.arch }} - - # 复制可执行文件 - cp -r build/macosx/${{ matrix.arch }}/${{ matrix.build_type }}/* artifacts/macos-${{ matrix.arch }}/ 2>/dev/null || true - - # 创建.app包(如果需要) - if [ -f "artifacts/macos-${{ matrix.arch }}/${{ env.PROJECT_NAME }}" ]; then - mkdir -p "artifacts/macos-${{ matrix.arch }}/${{ env.PROJECT_NAME }}.app/Contents/MacOS" - cp "artifacts/macos-${{ matrix.arch }}/${{ env.PROJECT_NAME }}" "artifacts/macos-${{ matrix.arch }}/${{ env.PROJECT_NAME }}.app/Contents/MacOS/" - fi - - # 压缩 - cd artifacts - tar -czf macos-${{ matrix.arch }}-${{ matrix.build_type }}.tar.gz macos-${{ matrix.arch }}/ - - - name: Upload artifacts - uses: actions/upload-artifact@v3 - with: - name: macos-${{ matrix.arch }}-${{ matrix.build_type }} - path: artifacts/macos-${{ matrix.arch }}-${{ matrix.build_type }}.tar.gz - - build-cross-platform: - needs: version-info - runs-on: ubuntu-latest - strategy: - matrix: - target: [mingw, android, ios] # 交叉编译目标 - - steps: - - uses: actions/checkout@v3 - - - name: Install xmake and toolchains - run: | - curl -fsSL https://xmake.io/shget.text | bash - echo "$HOME/.xmake/bin" >> $GITHUB_PATH - - # 安装交叉编译工具链 - if [ "${{ matrix.target }}" = "mingw" ]; then - sudo apt-get update - sudo apt-get install -y g++-mingw-w64-x86-64 g++-mingw-w64-i686 - elif [ "${{ matrix.target }}" = "android" ]; then - xmake repo --add third-party https://github.com/xmake-io/xmake-repo.git - fi - - - name: Build for ${{ matrix.target }} - run: | - # 更新版本号 - if [[ "${{ needs.version-info.outputs.version }}" != "0.0.0-dev"* ]]; then - sed -i "s/set_version(\"[^\"]*\")/set_version(\"${{ needs.version-info.outputs.version }}\")/" xmake.lua - fi - - # 根据目标平台配置 - case "${{ matrix.target }}" in - mingw) - xmake f -p mingw -a x86_64 --mode=release - ;; - android) - xmake f -p android --ndk=~/android-ndk-r23b --mode=release - ;; - ios) - xmake f -p iphoneos --mode=release - ;; - esac - - xmake build -v - - - name: Package cross-platform binaries - run: | - mkdir -p artifacts/${{ matrix.target }} - - # 复制构建结果 - case "${{ matrix.target }}" in - mingw) - cp -r build/mingw/x86_64/release/* artifacts/${{ matrix.target }}/ 2>/dev/null || true - ;; - android) - cp -r build/android/arm64-v8a/release/*.apk artifacts/${{ matrix.target }}/ 2>/dev/null || true - ;; - ios) - cp -r build/iphoneos/arm64/release/*.ipa artifacts/${{ matrix.target }}/ 2>/dev/null || true - ;; - esac - - # 压缩 - cd artifacts - tar -czf ${{ matrix.target }}-release.tar.gz ${{ matrix.target }}/ - - - name: Upload artifacts - uses: actions/upload-artifact@v3 - with: - name: ${{ matrix.target }}-release - path: artifacts/${{ matrix.target }}-release.tar.gz - - create-release: - needs: [version-info, build-linux, build-windows, build-macos] - if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') - runs-on: ubuntu-latest - - steps: - - name: Download all artifacts - uses: actions/download-artifact@v3 - - - name: Create Release - id: create_release - uses: softprops/action-gh-release@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - tag_name: ${{ github.ref_name }} - release_name: Release ${{ github.ref_name }} - body: | - # Release ${{ github.ref_name }} - - ## Build Info - - Version: ${{ needs.version-info.outputs.version }} - - Git Commit: ${{ needs.version-info.outputs.git_commit }} - - Build Date: ${{ env.BUILD_DATE }} - - ## Downloads - Below are the binaries for different platforms: - - ### Linux - - x86_64 Release - - x86_64 Debug - - ARM64 Release - - ARM64 Debug - - ### Windows - - x64 Release - - x64 Debug - - x86 Release - - x86 Debug - - ### macOS - - x86_64 Release - - x86_64 Debug - - ARM64 Release - - ARM64 Debug - - draft: false - prerelease: false - files: | - linux-*/ - windows-*/ - macos-*/ - mingw-*/ - - - name: Generate SHA256 checksums - run: | - # 为所有发布文件生成校验和 - find . -name "*.tar.gz" -o -name "*.zip" | while read file; do - sha256sum "$file" > "$file.sha256" - done - - # 上传校验和文件到发布 - gh release upload ${{ github.ref_name }} *.sha256 \ - --clobber \ - --repo ${{ github.repository }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.woodpecker.yml b/.woodpecker.yml new file mode 100644 index 0000000..1c75540 --- /dev/null +++ b/.woodpecker.yml @@ -0,0 +1,5 @@ +pipeline: + test: + image: alpine + commands: + - echo "Fig Build OK!"