| 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.11' |
| - 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 "${{ github.workspace }}/tardir" |
| tar -C "${{ github.workspace }}/tardir" -v -x -f "${{ github.workspace }}/${{ needs.src.outputs.src-tar-gz }}" |
| echo "path=${{ github.workspace }}/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 |
| |
| 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 }}/SDL3.xcframework/macos-arm64_x86_64" \ |
| -DCMAKE_SYSTEM_NAME=Darwin \ |
| -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" \ |
| -Werror=dev \ |
| -B build_darwin_2 |
| 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: | |
| New-Item C:\temp -ItemType Directory -ErrorAction SilentlyContinue |
| cd C:\temp |
| unzip "${{ github.workspace }}/${{ needs.src.outputs.src-zip }}" |
| echo "path=C:\temp\${{ 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 |
| - name: 'CMake (configure + build + tests) arm64' |
| 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_arm64 -A ARM64 |
| cmake --build build_x64 --config Release --verbose |
| |
| 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 |
| |
| android: |
| needs: [src] |
| runs-on: ubuntu-latest |
| outputs: |
| android-aar: ${{ steps.releaser.outputs.android-aar }} |
| 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: 'Setup Android NDK' |
| uses: nttld/setup-ndk@v1 |
| id: setup_ndk |
| with: |
| local-cache: true |
| ndk-version: r21e |
| - name: 'Setup Java JDK' |
| uses: actions/setup-java@v4 |
| with: |
| distribution: 'temurin' |
| java-version: '11' |
| - name: 'Install ninja' |
| run: | |
| sudo apt-get update -y |
| sudo apt-get install -y 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 Android prefab binary archive(s)' |
| id: releaser |
| run: | |
| python build-scripts/build-release.py \ |
| --create android \ |
| --commit ${{ inputs.commit }} \ |
| --project SDL3 \ |
| --root "${{ steps.tar.outputs.path }}" \ |
| --github \ |
| --debug |
| - name: 'Store Android archive(s)' |
| uses: actions/upload-artifact@v4 |
| with: |
| name: android |
| path: '${{ github.workspace }}/dist' |