name: 'release' run-name: 'Create SDL_mixer release artifacts for ${{ inputs.commit }}' on: workflow_dispatch: inputs: commit: description: 'Commit of SDL_mixer' 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: ref: ${{ inputs.commit }} sparse-checkout: 'build-scripts/build-release.py' - name: 'Set up SDL sources' uses: actions/checkout@v4 with: ref: ${{ inputs.commit }} path: 'SDL' fetch-depth: 0 - name: 'Build Source archive' id: releaser shell: bash env: GH_TOKEN: ${{ github.token }} run: | python build-scripts/build-release.py \ --actions source \ --commit ${{ inputs.commit }} \ --root "${{ github.workspace }}/SDL" \ --github \ --debug - name: 'Store source archives' uses: actions/upload-artifact@v4 with: name: sources path: '${{ github.workspace}}/dist' - name: 'Generate summary' run: | echo "Run the following commands to download all artifacts:" >> $GITHUB_STEP_SUMMARY echo '```' >> $GITHUB_STEP_SUMMARY echo "mkdir -p /tmp/${{ steps.releaser.outputs.project }}-${{ steps.releaser.outputs.version }}" >> $GITHUB_STEP_SUMMARY echo "cd /tmp/${{ steps.releaser.outputs.project }}-${{ steps.releaser.outputs.version }}" >> $GITHUB_STEP_SUMMARY echo "gh run -R ${{ github.repository }} download ${{ github.run_id }}" >> $GITHUB_STEP_SUMMARY echo '```' >> $GITHUB_STEP_SUMMARY linux-verify: needs: [src] runs-on: ubuntu-latest steps: - name: 'Set up Python' uses: actions/setup-python@v5 with: python-version: '3.11' - name: 'Download source archives' uses: actions/download-artifact@v4 with: name: sources path: '/tmp' - name: 'Unzip ${{ needs.src.outputs.src-zip }}' id: zip run: | set -e mkdir /tmp/zipdir cd /tmp/zipdir unzip "/tmp/${{ 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: | set -e mkdir -p /tmp/tardir tar -C /tmp/tardir -v -x -f "/tmp/${{ 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: | set -e diff "${{ steps.zip.outputs.path }}" "${{ steps.tar.outputs.path }}" - name: 'Test versioning' shell: bash run: | ${{ steps.tar.outputs.path }}/build-scripts/test-versioning.sh - name: 'Fetch build-release.py' uses: actions/checkout@v4 with: ref: ${{ inputs.commit }} sparse-checkout: 'build-scripts/build-release.py' - name: 'Download dependencies' id: deps env: GH_TOKEN: ${{ github.token }} run: | python build-scripts/build-release.py \ --actions download \ --commit ${{ inputs.commit }} \ --root "${{ steps.tar.outputs.path }}" \ --github \ --debug - name: 'Install Linux dependencies' run: | sudo apt-get update -y sudo apt-get install -y \ gnome-desktop-testing libasound2-dev libpulse-dev libaudio-dev libjack-dev libsndio-dev \ libusb-1.0-0-dev libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev \ libxss-dev libwayland-dev libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \ libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev \ libflac-dev \ fluidsynth libfluidsynth-dev \ libgme-dev \ libmpg123-dev \ libopusfile-dev \ libvorbis-dev \ libxmp-dev \ libwavpack-dev - name: 'Extract dependencies, build and install them' id: deps-build run: | tar -C /tmp -v -x -f "${{ steps.deps.outputs.dep-path }}/SDL3-${{ steps.deps.outputs.dep-sdl-version }}.tar.gz" cmake -S /tmp/SDL3-${{ steps.deps.outputs.dep-sdl-version }} -B /tmp/SDL-build -DCMAKE_INSTALL_PREFIX=/tmp/deps-prefix cmake --build /tmp/SDL-build cmake --install /tmp/SDL-build echo "path=/tmp/deps-prefix" >>$GITHUB_OUTPUT - name: 'CMake (configure + build)' run: | cmake \ -S ${{ steps.tar.outputs.path }} \ -B /tmp/build \ -DSDL3MIXER_SAMPLES=ON \ -DSDL3MIXER_TESTS=ON \ -DCMAKE_PREFIX_PATH="${{ steps.deps-build.outputs.path }}" 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.11' - name: 'Fetch build-release.py' uses: actions/checkout@v4 with: ref: ${{ inputs.commit }} sparse-checkout: 'build-scripts/build-release.py' - name: 'Install nasm' run: | brew install nasm - 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: 'Download external dependencies' run: | sh "${{ steps.tar.outputs.path }}/external/download.sh" --depth 1 - name: 'Build SDL3_mixer.dmg' id: releaser shell: bash env: GH_TOKEN: ${{ github.token }} run: | python build-scripts/build-release.py \ --actions dmg \ --commit ${{ inputs.commit }} \ --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: 'Set up Python' uses: actions/setup-python@v5 with: python-version: '3.11' - name: 'Fetch build-release.py' uses: actions/checkout@v4 with: ref: ${{ inputs.commit }} 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: 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: 'Download dependencies' id: deps env: GH_TOKEN: ${{ github.token }} run: | python build-scripts/build-release.py \ --actions download \ --commit ${{ inputs.commit }} \ --root "${{ steps.src.outputs.path }}" \ --github \ --debug - name: 'Mount dependencies' id: deps-mount run: | hdiutil attach "${{ steps.deps.outputs.dep-path }}/SDL3-${{ steps.deps.outputs.dep-sdl-version }}.dmg" sdl_mount_pount="/Volumes/SDL3" if [ ! -d "$sdl_mount_pount/SDL3.xcframework" ]; then echo "Cannot find SDL3.xcframework!" exit 1 fi echo "path=${sdl_mount_pount}" >>$GITHUB_OUTPUT - name: 'Download ${{ needs.dmg.outputs.dmg }}' uses: actions/download-artifact@v4 with: name: dmg path: '${{ github.workspace }}' - 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: 'Verify presence of optional frameworks' run: | OPTIONAL_FRAMEWORKS="gme opus wavpack xmp" rc=0 for opt in $OPTIONAL_FRAMEWORKS; do fw_path="${{ steps.mount.outputs.mount-point }}/optional/${opt}.xcframework" if [ -d "${fw_path}" ]; then echo "$fw_path OK" else echo "$fw_path MISSING" rc=1 fi done exit $rc - name: 'CMake (configure + build) Darwin' run: | set -e cmake -S "${{ steps.src.outputs.path }}/cmake/test" \ -DTEST_SHARED=TRUE \ -DTEST_SHARED=TRUE \ -DTEST_STATIC=FALSE \ -DCMAKE_PREFIX_PATH="${{ steps.mount.outputs.mount-point }};${{ steps.deps-mount.outputs.path }}" \ -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_SHARED=TRUE \ -DTEST_STATIC=FALSE \ -DCMAKE_PREFIX_PATH="${{ steps.mount.outputs.mount-point }};${{ steps.deps-mount.outputs.path }}" \ -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_SHARED=TRUE \ -DTEST_STATIC=FALSE \ -DCMAKE_PREFIX_PATH="${{ steps.mount.outputs.mount-point }};${{ steps.deps-mount.outputs.path }}" \ -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_SHARED=TRUE \ -DTEST_STATIC=FALSE \ -DCMAKE_PREFIX_PATH="${{ steps.mount.outputs.mount-point }};${{ steps.deps-mount.outputs.path }}" \ -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_SHARED=TRUE \ -DTEST_STATIC=FALSE \ -DCMAKE_PREFIX_PATH="${{ steps.mount.outputs.mount-point }};${{ steps.deps-mount.outputs.path }}" \ -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.11' - name: 'Fetch build-release.py' uses: actions/checkout@v4 with: ref: ${{ inputs.commit }} 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: 'Download external dependencies' run: | ${{ steps.zip.outputs.path }}/external/Get-GitModules.ps1 - name: 'Build MSVC binary archives' id: releaser env: GH_TOKEN: ${{ github.token }} run: | python build-scripts/build-release.py ` --actions download msvc ` --commit ${{ inputs.commit }} ` --root "${{ steps.zip.outputs.path }}" ` --github ` --debug - name: 'Store MSVC archives' uses: actions/upload-artifact@v4 with: name: msvc path: '${{ github.workspace }}/dist' msvc-verify: needs: [msvc, src] runs-on: windows-latest steps: - name: 'Fetch .github/actions/setup-ninja/action.yml' uses: actions/checkout@v4 with: ref: ${{ inputs.commit }} sparse-checkout: | .github/actions/setup-ninja/action.yml build-scripts/build-release.py - name: 'Set up Python' uses: actions/setup-python@v5 with: python-version: '3.11' - name: Set up ninja uses: ./.github/actions/setup-ninja - name: 'Download source archives' uses: actions/download-artifact@v4 with: name: sources 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: 'Download dependencies' id: deps env: GH_TOKEN: ${{ github.token }} run: | python build-scripts/build-release.py ` --actions download ` --commit ${{ inputs.commit }} ` --root "${{ steps.src.outputs.path }}" ` --github ` --debug - name: 'Extract dependencies' id: deps-extract run: | mkdir '${{ github.workspace }}/deps-vc' cd '${{ github.workspace }}/deps-vc' unzip "${{ steps.deps.outputs.dep-path }}/SDL3-devel-${{ steps.deps.outputs.dep-sdl-version }}-VC.zip" echo "path=${{ github.workspace }}/deps-vc" >>$env:GITHUB_OUTPUT - name: 'Download MSVC binaries' uses: actions/download-artifact@v4 with: name: msvc path: '${{ github.workspace }}' - 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: 'Configure vcvars x86' uses: ilammy/msvc-dev-cmd@v1 with: arch: x64_x86 - name: 'CMake (configure + build + tests) x86' run: | cmake -S "${{ steps.src.outputs.path }}/cmake/test" ` -B build_x86 ` -GNinja ` -DCMAKE_BUILD_TYPE=Debug ` -Werror=dev ` -DTEST_SHARED=TRUE ` -DTEST_STATIC=FALSE ` -DCMAKE_SUPPRESS_REGENERATION=TRUE ` -DCMAKE_PREFIX_PATH="${{ steps.bin.outputs.path }};${{ steps.deps-extract.outputs.path }}" Start-Sleep -Seconds 2 cmake --build build_x86 --config Release --verbose - name: 'Configure vcvars x64' uses: ilammy/msvc-dev-cmd@v1 with: arch: x64 - name: 'CMake (configure + build + tests) x64' run: | cmake -S "${{ steps.src.outputs.path }}/cmake/test" ` -B build_x64 ` -GNinja ` -DCMAKE_BUILD_TYPE=Debug ` -Werror=dev ` -DTEST_SHARED=TRUE ` -DTEST_STATIC=FALSE ` -DCMAKE_SUPPRESS_REGENERATION=TRUE ` -DCMAKE_PREFIX_PATH="${{ steps.bin.outputs.path }};${{ steps.deps-extract.outputs.path }}" Start-Sleep -Seconds 2 cmake --build build_x64 --config Release --verbose - name: 'Configure vcvars arm64' uses: ilammy/msvc-dev-cmd@v1 with: arch: x64_arm64 - name: 'CMake (configure + build + tests) arm64' run: | cmake -S "${{ steps.src.outputs.path }}/cmake/test" ` -B build_arm64 ` -GNinja ` -DCMAKE_BUILD_TYPE=Debug ` -Werror=dev ` -DTEST_SHARED=TRUE ` -DTEST_STATIC=FALSE ` -DCMAKE_SUPPRESS_REGENERATION=TRUE ` -DCMAKE_PREFIX_PATH="${{ steps.bin.outputs.path }};${{ steps.deps-extract.outputs.path }}" Start-Sleep -Seconds 2 cmake --build build_arm64 --config Release --verbose mingw: needs: [src] runs-on: ubuntu-24.04 # FIXME: current ubuntu-latest ships an outdated mingw, replace with ubuntu-latest once 24.04 becomes the new default 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.11' - name: 'Fetch build-release.py' uses: actions/checkout@v4 with: ref: ${{ inputs.commit }} 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 env: GH_TOKEN: ${{ github.token }} run: | python build-scripts/build-release.py \ --actions download mingw \ --commit ${{ inputs.commit }} \ --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: 'Set up Python' uses: actions/setup-python@v5 with: python-version: '3.11' - name: 'Fetch build-release.py' uses: actions/checkout@v4 with: ref: ${{ inputs.commit }} 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: 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: 'Download dependencies' id: deps env: GH_TOKEN: ${{ github.token }} run: | python build-scripts/build-release.py \ --actions download \ --commit ${{ inputs.commit }} \ --root "${{ steps.src.outputs.path }}" \ --github \ --debug - name: 'Untar and install dependencies' id: deps-extract run: | mkdir -p /tmp/deps-mingw/cmake mkdir -p /tmp/deps-mingw/i686-w64-mingw32 mkdir -p /tmp/deps-mingw/x86_64-w64-mingw32 mkdir -p /tmp/deps-mingw-extract/sdl3 tar -C /tmp/deps-mingw-extract/sdl3 -v -x -f "${{ steps.deps.outputs.dep-path }}/SDL3-devel-${{ steps.deps.outputs.dep-sdl-version }}-mingw.tar.gz" make -C /tmp/deps-mingw-extract/sdl3/SDL3-${{ steps.deps.outputs.dep-sdl-version }} install-all DESTDIR=/tmp/deps-mingw # FIXME: this should be fixed in SDL3 releases after 3.1.3 mkdir -p /tmp/deps-mingw/cmake cp -rv /tmp/deps-mingw-extract/sdl3/SDL3-${{ steps.deps.outputs.dep-sdl-version }}/cmake/* /tmp/deps-mingw/cmake - name: 'Download MinGW binaries' uses: actions/download-artifact@v4 with: name: mingw path: '${{ github.workspace }}' - name: 'Untar and install ${{ 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 }}" make -C /tmp/mingw-tardir/${{ needs.src.outputs.project }}-${{ needs.src.outputs.version }} install-all DESTDIR=/tmp/deps-mingw - name: 'CMake (configure + build) i686' run: | set -e cmake -S "${{ steps.src.outputs.path }}/cmake/test" \ -DCMAKE_BUILD_TYPE="Release" \ -DTEST_SHARED=TRUE \ -DTEST_STATIC=FALSE \ -DCMAKE_PREFIX_PATH="/tmp/deps-mingw" \ -DCMAKE_TOOLCHAIN_FILE="${{ steps.src.outputs.path }}/build-scripts/cmake-toolchain-mingw64-i686.cmake" \ -Werror=dev \ -B build_x86 cmake --build build_x86 --config Release --verbose - name: 'CMake (configure + build) x86_64' run: | set -e cmake -S "${{ steps.src.outputs.path }}/cmake/test" \ -DCMAKE_BUILD_TYPE="Release" \ -DTEST_SHARED=TRUE \ -DTEST_STATIC=FALSE \ -DCMAKE_PREFIX_PATH="/tmp/deps-mingw" \ -DCMAKE_TOOLCHAIN_FILE="${{ steps.src.outputs.path }}/build-scripts/cmake-toolchain-mingw64-x86_64.cmake" \ -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.11' - 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 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 env: GH_TOKEN: ${{ github.token }} run: | python build-scripts/build-release.py \ --actions download android \ --commit ${{ inputs.commit }} \ --root "${{ steps.tar.outputs.path }}" \ --github \ --debug - name: 'Store Android archive(s)' uses: actions/upload-artifact@v4 with: name: android path: '${{ github.workspace }}/dist' android-verify: needs: [android, src] runs-on: ubuntu-latest steps: - name: 'Set up Python' uses: actions/setup-python@v5 with: python-version: '3.11' - uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: '17' - name: 'Download source archives' uses: actions/download-artifact@v4 with: name: sources path: '${{ github.workspace }}' - name: 'Download Android .aar archive' uses: actions/download-artifact@v4 with: name: android 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: 'Extract Android SDK from AAR' id: sdk run: | unzip -o "${{ github.workspace }}/${{ needs.android.outputs.android-aar }}" python "${{ needs.src.outputs.project }}-${{ needs.src.outputs.version }}.aar" -o /tmp/SDL3_mixer-android echo "prefix=/tmp/SDL3_mixer-android" >>$GITHUB_OUTPUT - name: 'Download dependencies' id: deps env: GH_TOKEN: ${{ github.token }} run: | python "${{ steps.src.outputs.path }}/build-scripts/build-release.py" \ --actions download \ --commit ${{ inputs.commit }} \ --root "${{ steps.src.outputs.path }}" \ --github \ --debug - name: 'Extract dependencies' id: deps-extract run: | unzip -o "${{ steps.deps.outputs.dep-path }}/SDL3-devel-${{ steps.deps.outputs.dep-sdl-version }}-android.zip" python "SDL3-${{ steps.deps.outputs.dep-sdl-version }}.aar" -o /tmp/SDL3-android echo "sdl3-prefix=/tmp/SDL3-android" >>$GITHUB_OUTPUT - name: 'Install ninja' run: | sudo apt-get update -y sudo apt-get install -y ninja-build - name: 'CMake (configure + build) x86, x64, arm32, arm64' run: | android_abis="x86 x86_64 armeabi-v7a arm64-v8a" for android_abi in ${android_abis}; do echo "Configuring ${android_abi}..." cmake -S "${{ steps.src.outputs.path }}/cmake/test" \ -GNinja \ -DTEST_FULL=TRUE \ -DTEST_STATIC=FALSE \ -DCMAKE_PREFIX_PATH="${{ steps.sdk.outputs.prefix }};${{ steps.deps-extract.outputs.sdl3-prefix }}" \ -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK_HOME}/build/cmake/android.toolchain.cmake \ -DANDROID_ABI=${android_abi} \ -DCMAKE_BUILD_TYPE=Release \ -B "${android_abi}" echo "Building ${android_abi}..." cmake --build "${android_abi}" --config Release --verbose done