From d73f5d84c0fc5bf4044d34ebaac457d23b58d22e Mon Sep 17 00:00:00 2001 From: Angga Permana <86430023+anggape@users.noreply.github.com> Date: Mon, 24 Jul 2023 18:45:01 +0700 Subject: [PATCH] build raylib from sources (#170) --- .github/workflows/build.yml | 261 +++++++++++++++++++++--------------- 1 file changed, 151 insertions(+), 110 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c26dd738..a9406ea3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -8,143 +8,184 @@ on: - 'README.md' - '.github/ISSUE_TEMPLATE/**' workflow_dispatch: - jobs: - build: - name: Build on dotnet using ${{ matrix.os }} - runs-on: ${{ matrix.os }} + prepare: + runs-on: ubuntu-latest + outputs: + version: ${{ steps.version.outputs.version }} + pkgversion: ${{ steps.version.outputs.pkgversion }} + steps: + - name: checkout repository + uses: actions/checkout@v3 + + - name: check raylib version + id: version + shell: bash + run: | + echo "version=$(sed -n 's/.*\(.*\)<\/TargetRaylibTag>.*/\1/p' Raylib-cs/Raylib-cs.csproj)">> ${GITHUB_OUTPUT} + echo "pkgversion=$(sed -n 's/.*\(.*\)<\/PackageVersion>.*/\1/p' Raylib-cs/Raylib-cs.csproj)">> ${GITHUB_OUTPUT} + + build-linux: + runs-on: ubuntu-latest + needs: prepare + steps: + - name: setup dependencies + run: | + sudo apt install \ + libasound2-dev \ + libx11-dev \ + libxrandr-dev \ + libxi-dev \ + libgl1-mesa-dev \ + libglu1-mesa-dev \ + libxcursor-dev \ + libxinerama-dev + + - name: build raylib + env: + version: ${{ needs.prepare.outputs.version }} + run: | + curl -Lso raylib.zip https://github.com/raysan5/raylib/archive/refs/tags/${version}.zip + unzip -qq raylib.zip + cmake -S raylib-${version} \ + -B build \ + -D CMAKE_BUILD_TYPE=Release \ + -D BUILD_SHARED_LIBS=ON \ + -D BUILD_EXAMPLES=OFF + cmake --build build --config Release + + - name: upload build + uses: actions/upload-artifact@v3 + with: + name: linux-x64 + path: build/raylib/libraylib.so + if-no-files-found: error + + build-osx: + runs-on: macos-latest + needs: prepare strategy: matrix: - os: [ubuntu-latest, windows-latest, macOS-latest] + name: [arm64, x64] + include: + - name: arm64 + arch: arm64 + - name: x64 + arch: x86_64 steps: - - uses: actions/checkout@v2 - - name: Setup dotnet - uses: actions/setup-dotnet@v1 - with: - dotnet-version: 6.0.x - - name: Build project - run: dotnet build -c Release -f net6.0 - - name: Test project - run: dotnet test -c Release -f net6.0 + - name: build raylib + env: + version: ${{ needs.prepare.outputs.version }} + run: | + curl -Lso raylib.zip https://github.com/raysan5/raylib/archive/refs/tags/${version}.zip + unzip -qq raylib.zip + cmake -S raylib-${version} \ + -B build \ + -D CMAKE_BUILD_TYPE=Release \ + -D CMAKE_OSX_ARCHITECTURES=${{ matrix.arch }} \ + -D BUILD_SHARED_LIBS=ON \ + -D BUILD_EXAMPLES=OFF + cmake --build build --config Release + + - name: upload build + uses: actions/upload-artifact@v3 + with: + name: osx-${{ matrix.name }} + path: build/raylib/libraylib.dylib + if-no-files-found: error + + build-windows: + runs-on: windows-latest + needs: prepare + strategy: + matrix: + name: [x86, x64] + include: + - name: x86 + arch: win32 + - name: x64 + arch: x64 + steps: + - name: build ${{ matrix.arch }} + shell: bash + env: + version: ${{ needs.prepare.outputs.version }} + run: | + curl -Lso raylib.zip https://github.com/raysan5/raylib/archive/refs/tags/${version}.zip + unzip -qq raylib.zip + cmake -S raylib-${version} \ + -A ${{ matrix.arch }} \ + -B build \ + -D CMAKE_BUILD_TYPE=Release \ + -D BUILD_SHARED_LIBS=ON \ + -D BUILD_EXAMPLES=OFF + cmake --build build --config Release + + - name: upload build + uses: actions/upload-artifact@v3 + with: + name: win-${{ matrix.name }} + path: build/raylib/Release/raylib.dll + if-no-files-found: error + publish: - name: Build Release Package runs-on: ubuntu-latest - needs: build + needs: + - prepare + - build-linux + - build-osx + - build-windows steps: - - uses: actions/checkout@v2 - - name: Setup dotnet - uses: actions/setup-dotnet@v1 - with: - dotnet-version: 6.0.x - - name: Download Repo - uses: actions/checkout@v2 + - name: checkout repository + uses: actions/checkout@v3 - - id: get-tag - name: Get Target Raylib Version - uses: mavrosxristoforos/get-xml-info@1.0 + - uses: actions/download-artifact@v3 with: - xml-file: "./Raylib-cs/Raylib-cs.csproj" - xpath: "//TargetRaylibTag" + name: linux-x64 + path: Raylib-cs/runtimes/linux-x64/native - - name: echo tag - run: echo ${{ steps.get-tag.outputs.info }} - - - name: Download win-x64 Raylib Release - uses: robinraju/release-downloader@v1.3 + - uses: actions/download-artifact@v3 with: - repository: "raysan5/raylib" - tag: ${{ steps.get-tag.outputs.info }} - fileName: "raylib-${{steps.get-tag.outputs.info}}_win64_msvc16.zip" + name: osx-arm64 + path: Raylib-cs/runtimes/osx-arm64/native - - name: extract win-x64 - uses: montudor/action-zip@v1 + - uses: actions/download-artifact@v3 with: - args: unzip -qq raylib-${{steps.get-tag.outputs.info}}_win64_msvc16.zip -d raylib-win64 + name: osx-x64 + path: Raylib-cs/runtimes/osx-x64/native - - name: copy win-x64 - uses: canastro/copy-file-action@master - with: - source: "raylib-win64/raylib-${{steps.get-tag.outputs.info}}_win64_msvc16/lib/raylib.dll" - target: "Raylib-cs/runtimes/win-x64/native/raylib.dll" - - - name: Download win-x86 Raylib Release - uses: robinraju/release-downloader@v1.3 + - uses: actions/download-artifact@v3 with: - repository: "raysan5/raylib" - tag: ${{ steps.get-tag.outputs.info }} - fileName: "raylib-${{steps.get-tag.outputs.info}}_win32_msvc16.zip" + name: win-x86 + path: Raylib-cs/runtimes/win-x86/native - - name: extract win-x86 - uses: montudor/action-zip@v1 - with: - args: unzip -qq raylib-${{steps.get-tag.outputs.info}}_win32_msvc16.zip -d raylib-win86 - - - name: copy win-x86 - uses: canastro/copy-file-action@master - with: - source: "raylib-win86/raylib-${{steps.get-tag.outputs.info}}_win32_msvc16/lib/raylib.dll" - target: "Raylib-cs/runtimes/win-x86/native/raylib.dll" - - - name: Download linux-x64 Raylib Release - uses: robinraju/release-downloader@v1.3 + - uses: actions/download-artifact@v3 with: - repository: "raysan5/raylib" - tag: ${{ steps.get-tag.outputs.info }} - fileName: "raylib-${{steps.get-tag.outputs.info}}_linux_amd64.tar.gz" + name: win-x64 + path: Raylib-cs/runtimes/win-x64/native - - name: extract linux-x64 - run: mkdir -p raylib-linux64 && tar -xvf raylib-${{steps.get-tag.outputs.info}}_linux_amd64.tar.gz -C raylib-linux64 - - - name: copy linux-x64 - uses: canastro/copy-file-action@master - with: - source: "raylib-linux64/raylib-${{steps.get-tag.outputs.info}}_linux_amd64/lib/libraylib.so.${{steps.get-tag.outputs.info}}" - target: "Raylib-cs/runtimes/linux-x64/native/libraylib.so" - - - name: Download osx-x64 Raylib Release - uses: robinraju/release-downloader@v1.3 - with: - repository: "raysan5/raylib" - tag: ${{ steps.get-tag.outputs.info }} - fileName: "raylib-${{steps.get-tag.outputs.info}}_macos.tar.gz" - - - name: extract osx-x64 - run: mkdir -p raylib-osx64 && tar -xvf raylib-${{steps.get-tag.outputs.info}}_macos.tar.gz -C raylib-osx64 - - - name: copy osx-x64 - uses: canastro/copy-file-action@master - with: - source: "raylib-osx64/raylib-${{steps.get-tag.outputs.info}}_macos/lib/libraylib.dylib" - target: "Raylib-cs/runtimes/osx-x64/native/libraylib.dylib" - - - name: copy osx-arm64 - uses: canastro/copy-file-action@master - with: - source: "raylib-osx64/raylib-${{steps.get-tag.outputs.info}}_macos/lib/libraylib.dylib" - target: "Raylib-cs/runtimes/osx-arm64/native/libraylib.dylib" - - - id: get-nuget-version - name: Get NuGet Package Version - uses: mavrosxristoforos/get-xml-info@1.0 + - name: Setup dotnet + uses: actions/setup-dotnet@v3 with: - xml-file: "./Raylib-cs/Raylib-cs.csproj" - xpath: "//PackageVersion" + dotnet-version: 6.0.x - name: Create NuGet Package - run: dotnet pack -c Release Raylib-cs + run: dotnet pack -c Release Raylib-cs - name: Upload NuGet Package As Artifact - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: - name: Raylib-cs.${{steps.get-nuget-version.outputs.info}}.nupkg - path: Raylib-cs/bin/Release/Raylib-cs.${{steps.get-nuget-version.outputs.info}}.nupkg + path: Raylib-cs/bin/Release/Raylib-cs.${{ needs.prepare.outputs.pkgversion }}.nupkg - name: Upload NuGet Package As Release uses: softprops/action-gh-release@v1 if: startsWith(github.ref, 'refs/tags/') - with: - files: Raylib-cs/bin/Release/Raylib-cs.${{steps.get-nuget-version.outputs.info}}.nupkg - + with: + files: Raylib-cs/bin/Release/Raylib-cs.${{ needs.prepare.outputs.pkgversion }}.nupkg + - name: Publish to NuGet if: startsWith(github.ref, 'refs/tags/') - run: dotnet nuget push Raylib-cs/bin/Release/Raylib-cs.${{steps.get-nuget-version.outputs.info}}.nupkg --api-key ${{secrets.NUGET_API_KEY}} + run: | + dotnet nuget push \ + Raylib-cs/bin/Release/Raylib-cs.${{ needs.prepare.outputs.pkgversion }}.nupkg \ + --api-key ${{secrets.NUGET_API_KEY}}