Skip to content

Audio buffers gui update #830

Audio buffers gui update

Audio buffers gui update #830

Workflow file for this run

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 }}