name: Package on: [push, pull_request] jobs: Build: runs-on: windows-2025 strategy: fail-fast: false matrix: architecture: [win32, win64] library_linkage: [Dynamic, Static] build_type: [Debug, Release] env: GENERATOR: Visual Studio 17 2022 VCPKG_DEFAULT_TRIPLET: ${{ matrix.architecture == 'win32' && 'x86' || 'x64' }}-${{ matrix.library_linkage == 'Dynamic' && 'windows' || 'windows-static-md' }} steps: - uses: actions/checkout@v4 - name: Install Dependencies run: |- echo "Using vcpkg triplet: $env:VCPKG_DEFAULT_TRIPLET" C:\vcpkg\vcpkg install freetype[core] - name: Configure CMake run: >- cmake -B Build -G "$env:GENERATOR" -A ${{ matrix.architecture == 'win32' && 'Win32' || 'x64' }} -DRMLUI_WARNINGS_AS_ERRORS=ON -DBUILD_SHARED_LIBS=${{ matrix.library_linkage == 'Dynamic' && 'ON' || 'OFF' }} -DVCPKG_TARGET_TRIPLET="$env:VCPKG_DEFAULT_TRIPLET" -DCMAKE_TOOLCHAIN_FILE="C:/vcpkg/scripts/buildsystems/vcpkg.cmake" -DCMAKE_INSTALL_PREFIX="${{github.workspace}}/Install" -DRMLUI_INSTALL_TARGETS_DIR=Bin-${{matrix.library_linkage}}/CMake -DCMAKE_INSTALL_BINDIR=Bin-${{matrix.library_linkage}}/${{matrix.build_type}} -DCMAKE_INSTALL_LIBDIR=Bin-${{matrix.library_linkage}}/${{matrix.build_type}} -DCMAKE_INSTALL_INCLUDEDIR=Include -DCMAKE_INSTALL_DATADIR="." -DRMLUI_INSTALL_RUNTIME_DEPENDENCIES=OFF -DRMLUI_INSTALL_LICENSES_AND_BUILD_INFO=ON -DRMLUI_INSTALL_DEPENDENCIES_DIR="Dependencies/Bin-${{matrix.library_linkage}}" -DRMLUI_ARCHITECTURE="${{ matrix.architecture }}" -DRMLUI_COMMIT_DATE="$(git show $env:GITHUB_SHA --no-patch --format=%cd --date=iso)" -DRMLUI_RUN_ID="$env:GITHUB_RUN_ID" -DRMLUI_SHA="$env:GITHUB_SHA" - name: Build run: cmake --build Build --config ${{ matrix.build_type }} - name: Install run: cmake --install Build --config ${{ matrix.build_type }} - name: Upload artifacts uses: actions/upload-artifact@v4 with: name: build-${{ matrix.architecture }}-${{ matrix.library_linkage }}-${{ matrix.build_type }} path: ${{github.workspace}}/Install/ if-no-files-found: error Samples: runs-on: windows-2025 strategy: fail-fast: false matrix: architecture: [win32, win64] env: GENERATOR: Visual Studio 17 2022 VCPKG_DEFAULT_TRIPLET: ${{ matrix.architecture == 'win32' && 'x86' || 'x64' }}-windows${{ matrix.architecture == 'win64' && '-release' || '' }} steps: - uses: actions/checkout@v4 - uses: actions/checkout@v4 name: Checkout dependency rlottie with: repository: 'Samsung/rlottie' ref: 'd40008707addacb636ff435236d31c694ce2b6cf' path: 'Dependencies/rlottie' - name: Install Dependencies run: |- echo "Using vcpkg triplet: $env:VCPKG_DEFAULT_TRIPLET" C:\vcpkg\vcpkg install glfw3[core] freetype[core] lua[core] lunasvg[core] cd Dependencies\rlottie cmake -B build -G "$env:GENERATOR" -A ${{ matrix.architecture == 'win32' && 'Win32' || 'x64' }} -DBUILD_SHARED_LIBS=ON -DLOTTIE_MODULE=OFF cmake --build build --target rlottie --config Release -- "/clp:ErrorsOnly" - name: Configure CMake run: >- cmake -B Build -G "$env:GENERATOR" -A ${{ matrix.architecture == 'win32' && 'Win32' || 'x64' }} --preset samples-all -DRMLUI_HARFBUZZ_SAMPLE=OFF -DRMLUI_BACKEND=GLFW_GL3 -DBUILD_SHARED_LIBS=ON -DRMLUI_WARNINGS_AS_ERRORS=ON -DVCPKG_TARGET_TRIPLET="$env:VCPKG_DEFAULT_TRIPLET" -DCMAKE_TOOLCHAIN_FILE="C:/vcpkg/scripts/buildsystems/vcpkg.cmake" -DCMAKE_INSTALL_PREFIX="${{github.workspace}}/Install" -DCMAKE_INSTALL_BINDIR="Samples" -DCMAKE_INSTALL_DATADIR="." -DRMLUI_INSTALL_LICENSES_AND_BUILD_INFO=ON -DRMLUI_ARCHITECTURE="${{ matrix.architecture }}" -DRMLUI_COMMIT_DATE="$(git show $env:GITHUB_SHA --no-patch --format=%cd --date=iso)" -DRMLUI_RUN_ID="$env:GITHUB_RUN_ID" -DRMLUI_SHA="$env:GITHUB_SHA" - name: Build run: cmake --build Build --config Release - name: Copy runtime dependencies run: cp Dependencies/rlottie/build/Release/rlottie.dll Build/Release/ - name: Install run: cmake --install Build --config Release - name: Copy readme run: |- cp readme.md Install/ cp changelog.md Install/ cp Samples/readme.md Install/Samples/ - name: Copy extra license files run: |- cp Dependencies/rlottie/licenses Install/Dependencies/rlottie -Recurse cp Dependencies/rlottie/COPYING Install/Dependencies/rlottie echo @' The rlottie library includes source code licensed under Mozilla Public License Version 2.0. The source for this code can be found in the rlottie library at the following URL: https://github.com/Samsung/rlottie/blob/d40008707addacb636ff435236d31c694ce2b6cf/src/vector/vinterpolator.cpp '@ > "Install/Dependencies/rlottie/vinterpolator.txt" - uses: actions/upload-artifact@v4 with: name: samples-${{ matrix.architecture }} path: | ${{github.workspace}}/Install/ !${{github.workspace}}/Install/lib/ !${{github.workspace}}/Install/include/ if-no-files-found: error Package: needs: [Build, Samples] runs-on: windows-2025 strategy: fail-fast: true matrix: architecture: [win32, win64] steps: # Download artifacts in a well-defined order, with release binaries last. - uses: actions/download-artifact@v4 with: name: samples-${{ matrix.architecture }} - uses: actions/download-artifact@v4 with: name: build-${{ matrix.architecture }}-Dynamic-Debug - uses: actions/download-artifact@v4 with: name: build-${{ matrix.architecture }}-Static-Debug - uses: actions/download-artifact@v4 with: name: build-${{ matrix.architecture }}-Dynamic-Release - uses: actions/download-artifact@v4 with: name: build-${{ matrix.architecture }}-Static-Release - uses: actions/upload-artifact@v4 with: name: RmlUi-vs2022-${{ matrix.architecture }} path: ./ Release: needs: [Package] runs-on: windows-2025 if: ${{ github.ref_type == 'tag' }} permissions: contents: write steps: - name: Download release artifacts run: | $release_artifacts = "RmlUi-vs2022-win64", "RmlUi-vs2022-win32", "samples-win64" $headers = @{ "Authorization" = "token ${{ secrets.GITHUB_TOKEN }}" } $response = Invoke-RestMethod -Uri "https://api.github.com/repos/$env:GITHUB_REPOSITORY/actions/runs/$env:GITHUB_RUN_ID/artifacts" -Headers $headers foreach ($name in $release_artifacts) { $artifact = $response.artifacts | Where-Object { $_.name -eq $name } Invoke-WebRequest -Uri $artifact.archive_download_url -OutFile "$name.zip" -Headers $headers } - name: Release uses: softprops/action-gh-release@v2 with: token: ${{ secrets.RELEASE_TOKEN }} name: RmlUi ${{ github.ref_name }} files: "*.zip" draft: true fail_on_unmatched_files: true