763 lines
31 KiB
YAML
763 lines
31 KiB
YAML
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
|