Audio buffers gui update #830
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build and Release | |
| on: | |
| workflow_dispatch: | |
| push: | |
| paths-ignore: | |
| - '**.md' | |
| - '.github/**' | |
| - '.vscode/**' | |
| - '.devcontainer/**' | |
| pull_request: | |
| schedule: | |
| - cron: '0 0 * * 0' | |
| env: | |
| NAME_LOWER: geargrafx | |
| NAME_UPPER: Geargrafx | |
| jobs: | |
| linux: | |
| name: Linux | |
| strategy: | |
| matrix: | |
| os: [ubuntu-24.04, ubuntu-22.04, ubuntu-24.04-arm] | |
| include: | |
| - os: ubuntu-24.04 | |
| artifact_name: ubuntu24.04-x64 | |
| - os: ubuntu-22.04 | |
| artifact_name: ubuntu22.04-x64 | |
| - os: ubuntu-24.04-arm | |
| artifact_name: ubuntu24.04-arm64 | |
| runs-on: ${{ matrix.os }} | |
| permissions: | |
| contents: read | |
| packages: write | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Update OS | |
| run: sudo apt-get update -qq | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get install -y build-essential cmake libgtk-3-dev \ | |
| libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxfixes-dev \ | |
| libxi-dev libxss-dev libxkbcommon-dev libwayland-dev libdecor-0-dev \ | |
| libdrm-dev libgbm-dev libgl1-mesa-dev libegl1-mesa-dev libdbus-1-dev libudev-dev | |
| - name: Build and install SDL3 | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| run: | | |
| SDL3_TAG=$(gh release view --repo libsdl-org/SDL --json tagName -q '.tagName') | |
| echo "Building SDL3 $SDL3_TAG" | |
| git clone --depth 1 --branch "$SDL3_TAG" https://github.com/libsdl-org/SDL.git /tmp/SDL3 | |
| cmake -S /tmp/SDL3 -B /tmp/SDL3/build -DCMAKE_INSTALL_PREFIX=/usr -DSDL_TESTS=OFF -DSDL_EXAMPLES=OFF | |
| cmake --build /tmp/SDL3/build -j$(nproc) | |
| sudo cmake --install /tmp/SDL3/build | |
| - name: Get build number | |
| run: | | |
| echo "BUILD_NUMBER=$(git describe --abbrev=7 --dirty --always --tags)" >> $GITHUB_ENV | |
| - name: make | |
| run: make | |
| working-directory: platforms/linux | |
| - name: Prepare artifact directory | |
| run: | | |
| mkdir -p artifact/mcp | |
| cp platforms/shared/README.txt artifact | |
| cp platforms/shared/gamecontrollerdb.txt artifact | |
| cp platforms/linux/${{ env.NAME_LOWER }} artifact | |
| cp -r platforms/shared/desktop/mcp/resources artifact/mcp/ | |
| - name: Archive binary | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ env.NAME_UPPER }}-${{ env.BUILD_NUMBER }}-desktop-${{ matrix.artifact_name }} | |
| path: artifact/* | |
| linux-clang: | |
| name: Linux (Clang/LLVM) | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Update OS | |
| run: sudo apt-get update -qq | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get install -y build-essential cmake libgtk-3-dev \ | |
| libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxfixes-dev \ | |
| libxi-dev libxss-dev libxkbcommon-dev libwayland-dev libdecor-0-dev \ | |
| libdrm-dev libgbm-dev libgl1-mesa-dev libegl1-mesa-dev libdbus-1-dev libudev-dev | |
| - name: Build and install SDL3 | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| run: | | |
| SDL3_TAG=$(gh release view --repo libsdl-org/SDL --json tagName -q '.tagName') | |
| echo "Building SDL3 $SDL3_TAG" | |
| git clone --depth 1 --branch "$SDL3_TAG" https://github.com/libsdl-org/SDL.git /tmp/SDL3 | |
| cmake -S /tmp/SDL3 -B /tmp/SDL3/build -DCMAKE_INSTALL_PREFIX=/usr -DSDL_TESTS=OFF -DSDL_EXAMPLES=OFF | |
| cmake --build /tmp/SDL3/build -j$(nproc) | |
| sudo cmake --install /tmp/SDL3/build | |
| - name: Get build number | |
| run: | | |
| echo "BUILD_NUMBER=$(git describe --abbrev=7 --dirty --always --tags)" >> $GITHUB_ENV | |
| - name: make | |
| run: make | |
| working-directory: platforms/linux | |
| env: | |
| USE_CLANG: 1 | |
| libretro: | |
| name: Libretro (ubuntu) | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| packages: write | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Get build number | |
| run: | | |
| echo "BUILD_NUMBER=$(git describe --abbrev=7 --dirty --always --tags)" >> $GITHUB_ENV | |
| - name: make | |
| run: make | |
| working-directory: platforms/libretro | |
| - name: Archive binary | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ env.NAME_UPPER }}-${{ env.BUILD_NUMBER }}-libretro-linux-x64 | |
| path: platforms/libretro/${{ env.NAME_LOWER }}_libretro.so | |
| macos: | |
| name: macOS | |
| strategy: | |
| matrix: | |
| os: [macos-15, macos-15-intel] | |
| include: | |
| - os: macos-15-intel | |
| architecture: intel | |
| - os: macos-15 | |
| architecture: arm | |
| runs-on: ${{ matrix.os }} | |
| permissions: | |
| contents: read | |
| packages: write | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Install dependencies | |
| run: brew install sdl3 | |
| - name: Get build number | |
| run: | | |
| echo "BUILD_NUMBER=$(git describe --abbrev=7 --dirty --always --tags)" >> $GITHUB_ENV | |
| - name: make | |
| run: make dist | |
| working-directory: platforms/macos | |
| - name: Codesign app bundle | |
| if: github.event_name != 'pull_request' && github.repository_owner == 'drhelius' | |
| env: | |
| MACOS_CERTIFICATE: ${{ secrets.PROD_MACOS_CERTIFICATE }} | |
| MACOS_CERTIFICATE_PWD: ${{ secrets.PROD_MACOS_CERTIFICATE_PWD }} | |
| MACOS_CERTIFICATE_NAME: ${{ secrets.PROD_MACOS_CERTIFICATE_NAME }} | |
| MACOS_CI_KEYCHAIN_PWD: ${{ secrets.PROD_MACOS_CI_KEYCHAIN_PWD }} | |
| run: | | |
| echo $MACOS_CERTIFICATE | base64 --decode > certificate.p12 | |
| security create-keychain -p "$MACOS_CI_KEYCHAIN_PWD" build.keychain | |
| security default-keychain -s build.keychain | |
| security unlock-keychain -p "$MACOS_CI_KEYCHAIN_PWD" build.keychain | |
| security import certificate.p12 -k build.keychain -P "$MACOS_CERTIFICATE_PWD" -T /usr/bin/codesign | |
| security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "$MACOS_CI_KEYCHAIN_PWD" build.keychain | |
| codesign -v -f -o runtime --sign "$MACOS_CERTIFICATE_NAME" ${{ env.NAME_UPPER }}.app/Contents/Frameworks/libSDL3.0.dylib | |
| codesign -v -f -o runtime --entitlements "app.entitlements" --sign "$MACOS_CERTIFICATE_NAME" ${{ env.NAME_UPPER }}.app/Contents/MacOS/${{ env.NAME_LOWER }} | |
| codesign -v -f -o runtime --sign "$MACOS_CERTIFICATE_NAME" ${{ env.NAME_UPPER }}.app | |
| codesign -v -vvv --deep "${{ env.NAME_UPPER }}.app" | |
| working-directory: platforms/macos | |
| - name: Notarize app bundle | |
| if: github.event_name != 'pull_request' && github.repository_owner == 'drhelius' | |
| env: | |
| PROD_MACOS_NOTARIZATION_APPLE_ID: ${{ secrets.PROD_MACOS_NOTARIZATION_APPLE_ID }} | |
| PROD_MACOS_NOTARIZATION_TEAM_ID: ${{ secrets.PROD_MACOS_NOTARIZATION_TEAM_ID }} | |
| PROD_MACOS_NOTARIZATION_PWD: ${{ secrets.PROD_MACOS_NOTARIZATION_PWD }} | |
| run: | | |
| xcrun notarytool store-credentials "notarytool-profile" --apple-id "$PROD_MACOS_NOTARIZATION_APPLE_ID" --team-id "$PROD_MACOS_NOTARIZATION_TEAM_ID" --password "$PROD_MACOS_NOTARIZATION_PWD" | |
| ditto -c -k --keepParent "${{ env.NAME_UPPER }}.app" "notarization.zip" | |
| xcrun notarytool submit "notarization.zip" --keychain-profile "notarytool-profile" --wait | |
| xcrun stapler staple "${{ env.NAME_UPPER }}.app" | |
| spctl -a -vvv -t install "${{ env.NAME_UPPER }}.app" | |
| working-directory: platforms/macos | |
| - name: Prepare artifact directory | |
| run: | | |
| mkdir -p artifact | |
| cp platforms/shared/README.txt artifact/ | |
| ditto -c -k --keepParent "platforms/macos/${{ env.NAME_UPPER }}.app" "platforms/macos/${{ env.NAME_UPPER }}.app.zip" | |
| mv platforms/macos/${{ env.NAME_UPPER }}.app.zip artifact/ | |
| - name: Archive binary | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ env.NAME_UPPER }}-${{ env.BUILD_NUMBER }}-desktop-macos-${{ matrix.architecture == 'arm' && 'arm64' || 'intel' }} | |
| path: artifact/* | |
| windows: | |
| name: Windows | |
| strategy: | |
| matrix: | |
| architecture: [x64, arm64] | |
| runs-on: windows-latest | |
| permissions: | |
| contents: read | |
| packages: write | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Setup msbuild | |
| uses: microsoft/setup-msbuild@v2 | |
| - name: Download SDL3 development libraries | |
| shell: bash | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| run: | | |
| SDL3_TAG=$(gh release view --repo libsdl-org/SDL --json tagName -q '.tagName') | |
| SDL3_VERSION=${SDL3_TAG#release-} | |
| echo "Downloading SDL3 $SDL3_VERSION" | |
| curl -sL "https://github.com/libsdl-org/SDL/releases/download/${SDL3_TAG}/SDL3-devel-${SDL3_VERSION}-VC.zip" -o SDL3-devel.zip | |
| 7z x SDL3-devel.zip -oplatforms/windows/dependencies | |
| mv platforms/windows/dependencies/SDL3-${SDL3_VERSION} platforms/windows/dependencies/SDL3 | |
| - name: Get build number | |
| shell: bash | |
| run: | | |
| echo "BUILD_NUMBER=$(git describe --abbrev=7 --dirty --always --tags)" >> $GITHUB_ENV | |
| - name: msbuild | |
| run: msbuild ${{ env.NAME_UPPER }}.sln /t:Clean,Build /p:EmulatorBuild="${{ env.BUILD_NUMBER }}" /p:Configuration=Release /p:Platform=${{ matrix.architecture }} | |
| working-directory: platforms/windows | |
| - name: Prepare artifact directory | |
| run: | | |
| mkdir -p artifact/mcp | |
| cp platforms/shared/README.txt artifact | |
| cp platforms/shared/gamecontrollerdb.txt artifact | |
| cp platforms/windows/dependencies/SDL3/lib/${{ matrix.architecture }}/SDL3.dll artifact | |
| cp platforms/windows/release/${{ env.NAME_UPPER }}.exe artifact | |
| cp -r platforms/shared/desktop/mcp/resources artifact/mcp/ | |
| - name: Archive binary | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ env.NAME_UPPER }}-${{ env.BUILD_NUMBER }}-desktop-windows-${{ matrix.architecture }} | |
| path: artifact/* | |
| bsd: | |
| name: BSD | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| packages: write | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Get build number | |
| run: | | |
| echo "BUILD_NUMBER=$(git describe --abbrev=7 --dirty --always --tags)" >> $GITHUB_ENV | |
| - name: Run FreeBSD and gmake | |
| id: test | |
| uses: vmactions/freebsd-vm@v1 | |
| with: | |
| usesh: true | |
| prepare: pkg install -y git gmake pkgconf sdl3 lang/gcc gtk3 | |
| run: | | |
| cd platforms/bsd | |
| gmake | |
| - name: Prepare artifact directory | |
| run: | | |
| mkdir -p artifact/mcp | |
| cp platforms/shared/README.txt artifact | |
| cp platforms/shared/gamecontrollerdb.txt artifact | |
| cp platforms/bsd/${{ env.NAME_LOWER }} artifact | |
| cp -r platforms/shared/desktop/mcp/resources artifact/mcp/ | |
| - name: Archive binary | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ env.NAME_UPPER }}-${{ env.BUILD_NUMBER }}-desktop-bsd-x64 | |
| path: artifact/* | |
| mcpb: | |
| name: MCPB | |
| needs: [macos, windows, linux] | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| packages: write | |
| strategy: | |
| matrix: | |
| variant: | |
| - { platform: darwin, arch: arm64, os: macos-15, architecture: arm } | |
| - { platform: darwin, arch: x64, os: macos-15-intel, architecture: intel } | |
| - { platform: win32, arch: arm64, os: windows-latest, architecture: arm64 } | |
| - { platform: win32, arch: x64, os: windows-latest, architecture: x64 } | |
| - { platform: linux, arch: x64, os: ubuntu-24.04, artifact_name: ubuntu24.04-x64 } | |
| - { platform: linux, arch: arm64, os: ubuntu-24.04-arm, artifact_name: ubuntu24.04-arm64 } | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Get build number | |
| run: | | |
| echo "BUILD_NUMBER=$(git describe --abbrev=7 --dirty --always --tags)" >> $GITHUB_ENV | |
| - name: Download artifact | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: ${{ env.NAME_UPPER }}-${{ env.BUILD_NUMBER }}-desktop-${{ matrix.variant.platform == 'darwin' && format('macos-{0}', matrix.variant.architecture == 'arm' && 'arm64' || 'intel') || matrix.variant.platform == 'linux' && matrix.variant.artifact_name || format('windows-{0}', matrix.variant.architecture) }} | |
| path: download | |
| - name: Prepare MCPB structure | |
| run: | | |
| mkdir -p mcpb/server | |
| mkdir -p mcpb/mcp/resources | |
| cp platforms/shared/desktop/mcp/icon.png mcpb/icon.png | |
| if [ "${{ matrix.variant.platform }}" = "darwin" ]; then | |
| cd download | |
| unzip -q ${{ env.NAME_UPPER }}.app.zip | |
| cd .. | |
| cp download/${{ env.NAME_UPPER }}.app/Contents/MacOS/${{ env.NAME_LOWER }} mcpb/server/ | |
| cp platforms/shared/gamecontrollerdb.txt mcpb/ | |
| cp -r platforms/shared/desktop/mcp/resources/* mcpb/mcp/resources/ | |
| elif [ "${{ matrix.variant.platform }}" = "win32" ]; then | |
| cp download/${{ env.NAME_UPPER }}.exe mcpb/server/ | |
| cp download/SDL3.dll mcpb/server/ | |
| cp download/gamecontrollerdb.txt mcpb/ | |
| cp -r download/mcp/resources/* mcpb/mcp/resources/ | |
| else | |
| cp download/${{ env.NAME_LOWER }} mcpb/server/ | |
| cp download/gamecontrollerdb.txt mcpb/ | |
| cp -r download/mcp/resources/* mcpb/mcp/resources/ | |
| fi | |
| - name: Create manifest.json | |
| run: | | |
| # Determine binary name based on platform | |
| if [ "${{ matrix.variant.platform }}" = "win32" ]; then | |
| BINARY_NAME="${{ env.NAME_UPPER }}.exe" | |
| else | |
| BINARY_NAME="${{ env.NAME_LOWER }}" | |
| fi | |
| # Copy template and replace placeholders | |
| cp platforms/shared/desktop/mcp/manifest.json.template mcpb/manifest.json | |
| sed -i "s/{{NAME_LOWER}}/${{ env.NAME_LOWER }}/g" mcpb/manifest.json | |
| sed -i "s/{{NAME_UPPER}}/${{ env.NAME_UPPER }}/g" mcpb/manifest.json | |
| sed -i "s/{{VERSION}}/${{ env.BUILD_NUMBER }}/g" mcpb/manifest.json | |
| sed -i "s/{{PLATFORM}}/${{ matrix.variant.platform }}/g" mcpb/manifest.json | |
| sed -i "s/{{ARCH}}/${{ matrix.variant.arch }}/g" mcpb/manifest.json | |
| sed -i "s|{{BINARY_NAME}}|$BINARY_NAME|g" mcpb/manifest.json | |
| - name: Create MCPB package | |
| run: | | |
| cd mcpb | |
| # Use friendly names for file naming | |
| PLATFORM_NAME="${{ matrix.variant.platform }}" | |
| if [ "$PLATFORM_NAME" = "darwin" ]; then | |
| PLATFORM_NAME="macos" | |
| elif [ "$PLATFORM_NAME" = "win32" ]; then | |
| PLATFORM_NAME="windows" | |
| fi | |
| zip -r ../${{ env.NAME_UPPER }}-${{ env.BUILD_NUMBER }}-mcpb-${PLATFORM_NAME}-${{ matrix.variant.arch }}.mcpb * | |
| - name: Archive MCPB | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ env.NAME_UPPER }}-${{ env.BUILD_NUMBER }}-mcpb-${{ matrix.variant.platform == 'darwin' && 'macos' || matrix.variant.platform == 'win32' && 'windows' || matrix.variant.platform }}-${{ matrix.variant.arch }} | |
| path: ${{ env.NAME_UPPER }}-${{ env.BUILD_NUMBER }}-mcpb-${{ matrix.variant.platform == 'darwin' && 'macos' || matrix.variant.platform == 'win32' && 'windows' || matrix.variant.platform }}-${{ matrix.variant.arch }}.mcpb | |
| release: | |
| name: Release | |
| needs: [linux, macos, windows, bsd, mcpb] | |
| if: github.event_name != 'pull_request' && startswith(github.ref, 'refs/tags/') | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Get build number | |
| run: | | |
| echo "BUILD_NUMBER=$(git describe --abbrev=7 --dirty --always --tags)" >> $GITHUB_ENV | |
| - name: Prepare release directory | |
| run: | | |
| mkdir -p release | |
| - name: Download artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| pattern: ${{ env.NAME_UPPER }}-${{ env.BUILD_NUMBER }}-* | |
| path: release | |
| - name: Zip directories (non-MCPB) | |
| run: | | |
| cd release | |
| for f in *; do | |
| if [ -d "$f" ] && [[ ! "$f" =~ mcpb ]]; then | |
| cd $f | |
| echo "Compressing $f" | |
| zip -r $f.zip * | |
| mv $f.zip ../ | |
| cd .. | |
| fi | |
| done | |
| - name: Move MCPB packages | |
| run: | | |
| cd release | |
| for f in *-mcpb-*; do | |
| if [ -d "$f" ]; then | |
| mv $f/*.mcpb ./ | |
| fi | |
| done | |
| - name: Create release | |
| run: | | |
| gh release create ${{ github.ref_name }} ./release/*.zip ./release/*.mcpb \ | |
| --title "${{ env.NAME_UPPER }} ${{ github.ref_name }}" \ | |
| --draft \ | |
| --generate-notes | |
| env: | |
| GITHUB_TOKEN: ${{ github.TOKEN }} |