name: 'release' run-name: 'Create SDL release artifacts for ${{ inputs.commit }}' on: workflow_dispatch: inputs: commit: description: 'Commit of SDL' required: true jobs: src: runs-on: ubuntu-latest outputs: project: ${{ steps.releaser.outputs.project }} version: ${{ steps.releaser.outputs.version }} src-tar-gz: ${{ steps.releaser.outputs.src-tar-gz }} src-tar-xz: ${{ steps.releaser.outputs.src-tar-xz }} src-zip: ${{ steps.releaser.outputs.src-zip }} steps: - name: 'Set up Python' uses: actions/setup-python@v5 with: python-version: '3.10' - name: 'Fetch build-release.py' uses: actions/checkout@v4 with: sparse-checkout: 'build-scripts/build-release.py' - name: 'Set up SDL sources' uses: actions/checkout@v4 with: path: 'SDL' fetch-depth: 0 - name: 'Build Source archive' id: releaser shell: bash run: | python build-scripts/build-release.py \ --create source \ --commit ${{ inputs.commit }} \ --project SDL3 \ --root "${{ github.workspace }}/SDL" \ --github \ --debug - name: 'Store source archives' uses: actions/upload-artifact@v4 with: name: sources path: '${{ github.workspace}}/dist' linux-verify: needs: [src] runs-on: ubuntu-latest steps: - name: 'Download source archives' uses: actions/download-artifact@v4 with: name: sources path: '${{ github.workspace }}' - name: 'Unzip ${{ needs.src.outputs.src-zip }}' id: zip run: | mkdir /tmp/zipdir cd /tmp/zipdir unzip "${{ github.workspace }}/${{ needs.src.outputs.src-zip }}" echo "path=/tmp/zipdir/${{ needs.src.outputs.project }}-${{ needs.src.outputs.version }}" >>$GITHUB_OUTPUT - name: 'Untar ${{ needs.src.outputs.src-tar-gz }}' id: tar run: | mkdir -p /tmp/tardir tar -C /tmp/tardir -v -x -f "${{ github.workspace }}/${{ needs.src.outputs.src-tar-gz }}" echo "path=/tmp/tardir/${{ needs.src.outputs.project }}-${{ needs.src.outputs.version }}" >>$GITHUB_OUTPUT - name: 'Compare contents of ${{ needs.src.outputs.src-zip }} and ${{ needs.src.outputs.src-tar-gz }}' run: | diff /tmp/zipdir /tmp/tardir - name: 'Test versioning' shell: bash run: | ${{ steps.tar.outputs.path }}/build-scripts/test-versioning.sh - name: 'CMake (configure + build + tests)' run: | cmake -S ${{ steps.tar.outputs.path }} -B /tmp/build -DSDL_TEST_LIBRARY=TRUE -DSDL_TESTS=TRUE cmake --build /tmp/build --verbose ctest --test-dir /tmp/build --no-tests=error --output-on-failure dmg: needs: [src] runs-on: macos-latest outputs: dmg: ${{ steps.releaser.outputs.dmg }} steps: - name: 'Set up Python' uses: actions/setup-python@v5 with: python-version: '3.10' - name: 'Fetch build-release.py' uses: actions/checkout@v4 with: sparse-checkout: 'build-scripts/build-release.py' - name: 'Download source archives' uses: actions/download-artifact@v4 with: name: sources path: '${{ github.workspace }}' - name: 'Untar ${{ needs.src.outputs.src-tar-gz }}' id: tar run: | mkdir -p /tmp/tardir tar -C /tmp/tardir -v -x -f "${{ github.workspace }}/${{ needs.src.outputs.src-tar-gz }}" echo "path=/tmp/tardir/${{ needs.src.outputs.project }}-${{ needs.src.outputs.version }}" >>$GITHUB_OUTPUT - name: 'Build SDL3.dmg' id: releaser shell: bash run: | python build-scripts/build-release.py \ --create xcframework \ --commit ${{ inputs.commit }} \ --project SDL3 \ --root "${{ steps.tar.outputs.path }}" \ --github \ --debug - name: 'Store DMG image file' uses: actions/upload-artifact@v4 with: name: dmg path: '${{ github.workspace }}/dist' dmg-verify: needs: [dmg, src] runs-on: macos-latest steps: - name: 'Download source archives' uses: actions/download-artifact@v4 with: name: sources path: '${{ github.workspace }}' - name: 'Download ${{ needs.dmg.outputs.dmg }}' uses: actions/download-artifact@v4 with: name: dmg path: '${{ github.workspace }}' - name: 'Untar ${{ needs.src.outputs.src-tar-gz }}' id: src run: | mkdir -p /tmp/tardir tar -C /tmp/tardir -v -x -f "${{ github.workspace }}/${{ needs.src.outputs.src-tar-gz }}" echo "path=/tmp/tardir/${{ needs.src.outputs.project }}-${{ needs.src.outputs.version }}" >>$GITHUB_OUTPUT - name: 'Mount ${{ needs.dmg.outputs.dmg }}' id: mount run: | hdiutil attach '${{ github.workspace }}/${{ needs.dmg.outputs.dmg }}' mount_point="/Volumes/${{ needs.src.outputs.project }}" if [ ! -d "$mount_point/${{ needs.src.outputs.project }}.xcframework" ]; then echo "Cannot find ${{ needs.src.outputs.project }}.xcframework!" exit 1 fi echo "mount_point=$mount_point">>$GITHUB_OUTPUT - name: 'CMake (configure + build) Darwin' run: | cmake -S "${{ steps.src.outputs.path }}/cmake/test" \ -DTEST_FULL=FALSE \ -DTEST_STATIC=FALSE \ -DTEST_TEST=FALSE \ -DCMAKE_PREFIX_PATH="${{ steps.mount.outputs.mount_point }}" \ -DCMAKE_SYSTEM_NAME=Darwin \ -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" \ -Werror=dev \ -B build_darwin cmake --build build_darwin --config Release --verbose - name: 'CMake (configure + build) iOS' run: | cmake -S "${{ steps.src.outputs.path }}/cmake/test" \ -DTEST_FULL=FALSE \ -DTEST_STATIC=FALSE \ -DTEST_TEST=FALSE \ -DCMAKE_PREFIX_PATH="${{ steps.mount.outputs.mount_point }}" \ -DCMAKE_SYSTEM_NAME=iOS \ -DCMAKE_OSX_ARCHITECTURES="arm64" \ -Werror=dev \ -B build_ios cmake --build build_ios --config Release --verbose - name: 'CMake (configure + build) tvOS' run: | cmake -S "${{ steps.src.outputs.path }}/cmake/test" \ -DTEST_FULL=FALSE \ -DTEST_STATIC=FALSE \ -DTEST_TEST=FALSE \ -DCMAKE_PREFIX_PATH="${{ steps.mount.outputs.mount_point }}" \ -DCMAKE_SYSTEM_NAME=tvOS \ -DCMAKE_OSX_ARCHITECTURES="arm64" \ -Werror=dev \ -B build_tvos cmake --build build_tvos --config Release --verbose - name: 'CMake (configure + build) iOS simulator' run: | sysroot=$(xcodebuild -version -sdk iphonesimulator Path) echo "sysroot=$sysroot" cmake -S "${{ steps.src.outputs.path }}/cmake/test" \ -DTEST_FULL=FALSE \ -DTEST_STATIC=FALSE \ -DTEST_TEST=FALSE \ -DCMAKE_PREFIX_PATH="${{ steps.mount.outputs.mount_point }}" \ -DCMAKE_SYSTEM_NAME=iOS \ -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" \ -DCMAKE_OSX_SYSROOT="${sysroot}" \ -Werror=dev \ -B build_ios_simulator cmake --build build_ios_simulator --config Release --verbose - name: 'CMake (configure + build) tvOS simulator' run: | sysroot=$(xcodebuild -version -sdk appletvsimulator Path) echo "sysroot=$sysroot" cmake -S "${{ steps.src.outputs.path }}/cmake/test" \ -DTEST_FULL=FALSE \ -DTEST_STATIC=FALSE \ -DTEST_TEST=FALSE \ -DCMAKE_PREFIX_PATH="${{ steps.mount.outputs.mount_point }}" \ -DCMAKE_SYSTEM_NAME=tvOS \ -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" \ -DCMAKE_OSX_SYSROOT="${sysroot}" \ -Werror=dev \ -B build_tvos_simulator cmake --build build_tvos_simulator --config Release --verbose msvc: needs: [src] runs-on: windows-2019 outputs: VC-x86: ${{ steps.releaser.outputs.VC-x86 }} VC-x64: ${{ steps.releaser.outputs.VC-x64 }} VC-devel: ${{ steps.releaser.outputs.VC-devel }} steps: - name: 'Set up Python' uses: actions/setup-python@v5 with: python-version: '3.10' - name: 'Fetch build-release.py' uses: actions/checkout@v4 with: sparse-checkout: 'build-scripts/build-release.py' - name: 'Download source archives' uses: actions/download-artifact@v4 with: name: sources path: '${{ github.workspace }}' - name: 'Unzip ${{ needs.src.outputs.src-zip }}' id: zip run: | mkdir C:\zipdir cd C:\zipdir unzip "${{ github.workspace }}/${{ needs.src.outputs.src-zip }}" echo "path=C:\zipdir\${{ needs.src.outputs.project }}-${{ needs.src.outputs.version }}" >>$Env:GITHUB_OUTPUT - name: 'Build MSVC binary archives' id: releaser run: | python build-scripts/build-release.py ` --create win32 ` --commit ${{ inputs.commit }} ` --project SDL3 ` --root "${{ steps.zip.outputs.path }}" ` --github ` --debug - name: 'Store MSVC archives' uses: actions/upload-artifact@v4 with: name: win32 path: '${{ github.workspace }}/dist' msvc-verify: needs: [msvc, src] runs-on: windows-latest steps: - name: 'Download source archives' uses: actions/download-artifact@v4 with: name: sources path: '${{ github.workspace }}' - name: 'Download MSVC binaries' uses: actions/download-artifact@v4 with: name: win32 path: '${{ github.workspace }}' - name: 'Unzip ${{ needs.src.outputs.src-zip }}' id: src run: | mkdir '${{ github.workspace }}/sources' cd '${{ github.workspace }}/sources' unzip "${{ github.workspace }}/${{ needs.src.outputs.src-zip }}" echo "path=${{ github.workspace }}/sources/${{ needs.src.outputs.project }}-${{ needs.src.outputs.version }}" >>$env:GITHUB_OUTPUT - name: 'Unzip ${{ needs.msvc.outputs.VC-devel }}' id: bin run: | mkdir '${{ github.workspace }}/vc' cd '${{ github.workspace }}/vc' unzip "${{ github.workspace }}/${{ needs.msvc.outputs.VC-devel }}" echo "path=${{ github.workspace }}/vc/${{ needs.src.outputs.project }}-${{ needs.src.outputs.version }}" >>$env:GITHUB_OUTPUT - name: 'CMake (configure + build + tests) x86' run: | $env:PATH += ";${{ steps.bin.outputs.path }}/x86" cmake -S "${{ steps.src.outputs.path }}/cmake/test" ` -DTEST_FULL=TRUE ` -DTEST_STATIC=FALSE ` -DTEST_TEST=TRUE ` -DCMAKE_PREFIX_PATH="${{ steps.bin.outputs.path }}" ` -Werror=dev ` -B build_x86 -A win32 cmake --build build_x86 --config Release --verbose ctest --test-dir build_x86 --no-tests=error -C Release --output-on-failure - name: 'CMake (configure + build + tests) x64' run: | $env:PATH += ";${{ steps.bin.outputs.path }}/x86" cmake -S "${{ steps.src.outputs.path }}/cmake/test" ` -DTEST_FULL=TRUE ` -DTEST_STATIC=FALSE ` -DTEST_TEST=TRUE ` -DCMAKE_PREFIX_PATH="${{ steps.bin.outputs.path }}" ` -Werror=dev ` -B build_x64 -A x64 cmake --build build_x64 --config Release --verbose ctest --test-dir build_x64 --no-tests=error -C Release --output-on-failure mingw: needs: [src] runs-on: ubuntu-latest outputs: mingw-devel-tar-gz: ${{ steps.releaser.outputs.mingw-devel-tar-gz }} mingw-devel-tar-xz: ${{ steps.releaser.outputs.mingw-devel-tar-xz }} steps: - name: 'Set up Python' uses: actions/setup-python@v5 with: python-version: '3.10' - name: 'Fetch build-release.py' uses: actions/checkout@v4 with: sparse-checkout: 'build-scripts/build-release.py' - name: 'Install Mingw toolchain' run: | sudo apt-get update -y sudo apt-get install -y gcc-mingw-w64 g++-mingw-w64 ninja-build - name: 'Download source archives' uses: actions/download-artifact@v4 with: name: sources path: '${{ github.workspace }}' - name: 'Untar ${{ needs.src.outputs.src-tar-gz }}' id: tar run: | mkdir -p /tmp/tardir tar -C /tmp/tardir -v -x -f "${{ github.workspace }}/${{ needs.src.outputs.src-tar-gz }}" echo "path=/tmp/tardir/${{ needs.src.outputs.project }}-${{ needs.src.outputs.version }}" >>$GITHUB_OUTPUT - name: 'Build MinGW binary archives' id: releaser run: | python build-scripts/build-release.py \ --create mingw \ --commit ${{ inputs.commit }} \ --project SDL3 \ --root "${{ steps.tar.outputs.path }}" \ --github \ --debug - name: 'Store MinGW archives' uses: actions/upload-artifact@v4 with: name: mingw path: '${{ github.workspace }}/dist' mingw-verify: needs: [mingw, src] runs-on: ubuntu-latest steps: - name: 'Install Mingw toolchain' run: | sudo apt-get update -y sudo apt-get install -y gcc-mingw-w64 g++-mingw-w64 ninja-build - name: 'Download source archives' uses: actions/download-artifact@v4 with: name: sources path: '${{ github.workspace }}' - name: 'Download MinGW binaries' uses: actions/download-artifact@v4 with: name: mingw path: '${{ github.workspace }}' - name: 'Untar ${{ needs.src.outputs.src-tar-gz }}' id: src run: | mkdir -p /tmp/tardir tar -C /tmp/tardir -v -x -f "${{ github.workspace }}/${{ needs.src.outputs.src-tar-gz }}" echo "path=/tmp/tardir/${{ needs.src.outputs.project }}-${{ needs.src.outputs.version }}" >>$GITHUB_OUTPUT - name: 'Untar ${{ needs.mingw.outputs.mingw-devel-tar-gz }}' id: bin run: | mkdir -p /tmp/mingw-tardir tar -C /tmp/mingw-tardir -v -x -f "${{ github.workspace }}/${{ needs.mingw.outputs.mingw-devel-tar-gz }}" echo "path=/tmp/mingw-tardir/${{ needs.src.outputs.project }}-${{ needs.src.outputs.version }}" >>$GITHUB_OUTPUT - name: 'CMake (configure + build) i686' run: | cmake -S "${{ steps.src.outputs.path }}/cmake/test" \ -DCMAKE_BUILD_TYPE="Release" \ -DTEST_FULL=TRUE \ -DTEST_STATIC=TRUE \ -DTEST_TEST=TRUE \ -DCMAKE_PREFIX_PATH="${{ steps.bin.outputs.path }}" \ -DCMAKE_TOOLCHAIN_FILE="${{ steps.src.outputs.path }}/build-scripts/cmake-toolchain-mingw64-i686.cmake" \ -DCMAKE_C_FLAGS="-DSDL_DISABLE_SSE4_2" \ -Werror=dev \ -B build_x86 cmake --build build_x86 --config Release --verbose - name: 'CMake (configure + build) x86_64' run: | cmake -S "${{ steps.src.outputs.path }}/cmake/test" \ -DCMAKE_BUILD_TYPE="Release" \ -DTEST_FULL=TRUE \ -DTEST_STATIC=TRUE \ -DTEST_TEST=TRUE \ -DCMAKE_PREFIX_PATH="${{ steps.bin.outputs.path }}" \ -DCMAKE_TOOLCHAIN_FILE="${{ steps.src.outputs.path }}/build-scripts/cmake-toolchain-mingw64-x86_64.cmake" \ -DCMAKE_C_FLAGS="-DSDL_DISABLE_SSE4_2" \ -Werror=dev \ -B build_x64 cmake --build build_x64 --config Release --verbose