Throne build matrix #115
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Nekoray build matrix - cmake | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| tag: | |
| description: "Release Tag and version" | |
| required: true | |
| publish: | |
| description: "r for normal release, p for prerelease, leave empty to not publish anything" | |
| required: false | |
| jobs: | |
| build-go: | |
| permissions: | |
| contents: read | |
| strategy: | |
| matrix: | |
| include: | |
| - cross_os: public_res | |
| cross_arch: public_res | |
| go_version: "1.24.4" | |
| - cross_os: windows | |
| cross_arch: amd64 | |
| go_version: "1.24.4" | |
| - cross_os: linux | |
| cross_arch: amd64 | |
| go_version: "1.24.4" | |
| - cross_os: linux | |
| cross_arch: arm64 | |
| go_version: "1.24.4" | |
| - cross_os: darwin | |
| cross_arch: amd64 | |
| go_version: "1.24.4" | |
| - cross_os: darwin | |
| cross_arch: arm64 | |
| go_version: "1.24.4" | |
| fail-fast: false | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checking out sources | |
| uses: actions/checkout@v4.2.2 | |
| - name: Cache Common Download | |
| id: cache-common | |
| uses: actions/cache@v4.2.3 | |
| with: | |
| path: artifacts.tgz | |
| key: CommonCache-${{ matrix.cross_os }}-${{ matrix.cross_arch }}-${{ hashFiles('script/build_go.sh', 'core/*') }}-${{ matrix.go_version }} | |
| - name: Install Golang | |
| if: steps.cache-common.outputs.cache-hit != 'true' | |
| uses: actions/setup-go@v5.5.0 | |
| with: | |
| go-version: ${{ matrix.go_version }} | |
| cache-dependency-path: | | |
| core/server/go.sum | |
| core/updater/go.sum | |
| - name: Build golang parts | |
| if: steps.cache-common.outputs.cache-hit != 'true' | |
| shell: bash | |
| run: | | |
| [ ${{ matrix.cross_os }} == public_res ] || GOOS=${{ matrix.cross_os }} GOARCH=${{ matrix.cross_arch }} ./script/build_go.sh | |
| [ ${{ matrix.cross_os }} == public_res ] || exit 0 | |
| ./script/build_public_res.sh | |
| - name: Tar files | |
| if: steps.cache-common.outputs.cache-hit != 'true' | |
| run: tar czvf artifacts.tgz ./deployment | |
| - name: Uploading Artifact | |
| uses: actions/upload-artifact@v4.6.2 | |
| with: | |
| name: NekoRay-${{ github.sha }}-Common-${{ matrix.cross_os }}-${{ matrix.cross_arch }} | |
| path: artifacts.tgz | |
| build-cpp: | |
| permissions: | |
| contents: read | |
| needs: | |
| - build-go | |
| strategy: | |
| matrix: | |
| include: | |
| - platform: windows-latest | |
| qt_version: "6.9.1" | |
| target: amd64 | |
| - platform: ubuntu-22.04 | |
| qt_version: "6.9.1" | |
| target: amd64 | |
| - platform: ubuntu-24.04-arm | |
| qt_version: "6.9.1" | |
| target: arm64 | |
| - platform: macos-latest | |
| qt_version: "6.9.1" | |
| target: x86_64 | |
| - platform: macos-latest | |
| qt_version: "6.9.1" | |
| target: arm64 | |
| fail-fast: false | |
| runs-on: ${{ matrix.platform }} | |
| env: | |
| ACTIONS_ALLOW_UNSECURE_COMMANDS: true | |
| INPUT_VERSION: ${{ github.event.inputs.tag }} | |
| steps: | |
| - name: Checking out sources | |
| uses: actions/checkout@v4.2.2 | |
| with: | |
| submodules: "recursive" | |
| - name: Install mingw | |
| if: matrix.platform == 'windows-latest' | |
| uses: bwoodsend/setup-winlibs-action@v1.15 | |
| - name: Download Artifacts | |
| uses: actions/download-artifact@v4.3.0 | |
| with: | |
| path: download-artifact | |
| # ========================================================================================================= Qt Install | |
| - name: Qt static Cache | |
| id: cache-static-Qt | |
| if: matrix.platform == 'windows-latest' | |
| uses: actions/cache@v4.2.3 | |
| with: | |
| path: qt6/build | |
| key: QtStaticCache-${{ matrix.platform }}-${{ matrix.target }}-Qt${{ matrix.qt_version }} | |
| - name: Install Qt Windows | |
| shell: powershell | |
| if: matrix.platform == 'windows-latest' && steps.cache-static-Qt.outputs.cache-hit != 'true' | |
| run: ./script/build_qt_static_windows.bat ${{ matrix.qt_version }} | |
| - name: Install Qt | |
| uses: jurplel/install-qt-action@v4.3.0 | |
| if: matrix.platform != 'windows-latest' | |
| with: | |
| version: ${{ matrix.qt_version }} | |
| setup-python: true | |
| cache: true | |
| cache-key-prefix: QtCache-${{ matrix.platform }}-${{ matrix.target }} | |
| # ========================================================================================================= Build deps | |
| - name: Cache Download | |
| id: cache-deps | |
| uses: actions/cache@v4.2.3 | |
| with: | |
| path: libs/deps | |
| key: DepsCache-${{ matrix.platform }}-${{ matrix.target }}-${{ hashFiles('script/build_deps_*.sh') }}-Qt${{ matrix.qt_version }} | |
| - name: Build Dependencies | |
| shell: bash | |
| if: steps.cache-deps.outputs.cache-hit != 'true' | |
| run: ./script/build_deps_all.sh ${{ matrix.target }} | |
| # ========================================================================================================= Generate MakeFile and Build | |
| - name: Windows - Generate MakeFile and Build | |
| shell: bash | |
| if: matrix.platform == 'windows-latest' | |
| run: | | |
| export CMAKE_PREFIX_PATH=$PWD/qt6/build/lib/cmake | |
| mkdir build | |
| cd build | |
| cmake -GNinja -DCMAKE_CXX_FLAGS="-static" -DCMAKE_BUILD_TYPE=Debug .. | |
| ninja -j2 | |
| cd .. | |
| ./script/deploy_windows64.sh | |
| - name: Build Installer with NSIS | |
| shell: cmd | |
| if: matrix.platform == 'windows-latest' | |
| run: | | |
| cp .\script\windows_installer.nsi . | |
| makensis windows_installer.nsi | |
| cp NekoraySetup.exe deployment/ | |
| - name: Linux - Generate MakeFile and Build | |
| shell: bash | |
| if: contains( matrix.platform, 'ubuntu' ) | |
| run: | | |
| sudo apt update && sudo apt upgrade -y | |
| mkdir build | |
| cd build | |
| cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXE_LINKER_FLAGS="-static-libgcc -static-libstdc++" .. | |
| ninja | |
| cd .. | |
| ./script/deploy_linux64.sh | |
| - name: macOS - Generate MakeFile and Build | |
| shell: bash | |
| if: matrix.platform == 'macos-latest' | |
| run: | | |
| mkdir build | |
| cd build | |
| cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DNKR_PACKAGE_MACOS=1 -DCMAKE_OSX_DEPLOYMENT_TARGET=10.15 -DCMAKE_OSX_ARCHITECTURES=${{ matrix.target }} .. | |
| ninja | |
| cd .. | |
| ./script/deploy_macos.sh ${{ matrix.target }} | |
| # ========================================================================================================= Deployments | |
| - name: Tar files | |
| shell: bash | |
| run: tar czvf artifacts.tgz ./deployment | |
| - name: Uploading Artifact | |
| uses: actions/upload-artifact@v4.6.2 | |
| with: | |
| name: NekoRay-${{ github.sha }}-${{ matrix.platform }}-${{ matrix.target }}-Qt${{ matrix.qt_version }} | |
| path: artifacts.tgz | |
| publish: | |
| name: Pack & Publish Release | |
| runs-on: ubuntu-latest | |
| needs: | |
| - build-cpp | |
| permissions: | |
| contents: write | |
| actions: read | |
| steps: | |
| - name: Checking out sources | |
| uses: actions/checkout@v4.2.2 | |
| - name: Download Artifacts | |
| uses: actions/download-artifact@v4.3.0 | |
| with: | |
| path: download-artifact | |
| - name: Pack | |
| run: | | |
| curl -Lo - https://github.com/tcnksm/ghr/releases/download/v0.16.2/ghr_v0.16.2_linux_amd64.tar.gz | tar xzv | |
| mv ghr*linux_amd64/ghr . | |
| source script/env_deploy.sh | |
| find . -name artifacts.tgz | xargs -n1 tar xvzf | |
| cd deployment | |
| rm -rf *.pdb | |
| #### | |
| bash ../script/pack_debian.sh ${{ github.event.inputs.tag }} | |
| mv nekoray.deb $version_standalone-debian-x64.deb | |
| rm -rf nekoray | |
| #### | |
| mv linux-amd64 nekoray | |
| zip -9 -r $version_standalone-linux-amd64.zip nekoray | |
| rm -rf nekoray | |
| #### | |
| mv linux-arm64 nekoray | |
| zip -9 -r $version_standalone-linux-arm64.zip nekoray | |
| rm -rf nekoray | |
| #### | |
| mv NekoraySetup.exe $version_standalone-windows64-installer.exe | |
| mv windows64 nekoray | |
| zip -9 -r $version_standalone-windows64.zip nekoray | |
| rm -rf nekoray | |
| #### | |
| mkdir Nekoray | |
| mv macos-arm64/nekoray.app Nekoray/nekoray.app | |
| zip -9 --symlinks -r $version_standalone-macos-arm64.zip Nekoray | |
| rm -rf macos-arm64 | |
| rm -rf Nekoray | |
| #### | |
| mkdir Nekoray | |
| mv macos-amd64/nekoray.app Nekoray/nekoray.app | |
| zip -9 --symlinks -r $version_standalone-macos-amd64.zip Nekoray | |
| rm -rf macos-amd64 | |
| rm -rf Nekoray | |
| - name: Clean Up | |
| run: | | |
| cd deployment | |
| rm -rf windows-arm64 | |
| rm -rf linux-arm64 | |
| rm -rf linux-amd64 | |
| rm -rf windows64 | |
| rm -rf macos-amd64 | |
| rm -rf macos-arm64 | |
| rm -rf public_res | |
| rm -rf *.pdb | |
| - name: Uploading Artifact | |
| uses: actions/upload-artifact@v4.6.2 | |
| with: | |
| name: Deployment-${{ github.sha }} | |
| path: deployment | |
| - name: PreRelease | |
| if: github.event.inputs.publish == 'p' | |
| run: | | |
| ./ghr -prerelease -delete -t "${{ github.token }}" -n "${{ github.event.inputs.tag }}" "${{ github.event.inputs.tag }}" deployment | |
| - name: Release | |
| if: github.event.inputs.publish == 'r' | |
| run: | | |
| ./ghr -delete -t "${{ github.token }}" -n "${{ github.event.inputs.tag }}" "${{ github.event.inputs.tag }}" deployment |