426 lines
19 KiB
YAML
426 lines
19 KiB
YAML
|
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
|