Enable CI on migration branch #532
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: Meson CI | |
| on: | |
| push: | |
| branches: [ 'migration*' ] | |
| tags: [ 'v*' ] | |
| pull_request: | |
| branches: [ master ] | |
| workflow_dispatch: | |
| jobs: | |
| build: | |
| name: ${{ matrix.config.name }} | |
| runs-on: ${{ matrix.config.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| config: | |
| - name: Windows MSVC Release | |
| os: windows-latest | |
| msvc: true | |
| devenv: | | |
| Import-Module "$env:VS\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" | |
| Enter-VsDevShell -VsInstallPath $env:VS -SkipAutomaticLocation -DevCmdArguments "-arch=x64 -host_arch=x64" | |
| buildtype: release | |
| args: >- | |
| -Ddefault_library=static | |
| --force-fallback-for=zlib,harfbuzz,freetype2,fribidi,libpng | |
| -Dfallback_nasm=true | |
| -Dfreetype2:harfbuzz=disabled | |
| -Dharfbuzz:freetype=disabled | |
| -Dharfbuzz:cairo=disabled | |
| -Dharfbuzz:glib=disabled | |
| -Dharfbuzz:gobject=disabled | |
| -Dharfbuzz:tests=disabled | |
| -Dharfbuzz:docs=disabled | |
| -Dfribidi:tests=false | |
| -Dfribidi:docs=false | |
| -Dlibass:fontconfig=disabled | |
| #- { | |
| # name: Windows MinGW, | |
| # os: windows-latest, | |
| # msvc: false | |
| #} | |
| - { | |
| name: Ubuntu Debug, | |
| os: ubuntu-latest, | |
| buildtype: debugoptimized, | |
| args: -Db_pch=false | |
| } | |
| - { | |
| name: Ubuntu Release, | |
| os: ubuntu-latest, | |
| buildtype: release, | |
| args: -Db_pch=false | |
| } | |
| - { | |
| name: macOS x86_64 Debug, | |
| os: macos-15-intel, | |
| buildtype: debugoptimized, | |
| args: -Ddefault_library=static -Dbuild_osx_bundle=true -Dlocal_boost=true --force-fallback-for=ffms2 | |
| } | |
| - { | |
| name: macOS x86_64 Release, | |
| os: macos-15-intel, | |
| buildtype: release, | |
| args: -Ddefault_library=static -Dbuild_osx_bundle=true -Dlocal_boost=true --force-fallback-for=ffms2 | |
| } | |
| - { | |
| name: macOS arm64 Debug, | |
| os: macos-15, | |
| buildtype: debugoptimized, | |
| args: -Ddefault_library=static -Dbuild_osx_bundle=true -Dlocal_boost=true --force-fallback-for=ffms2 | |
| } | |
| - { | |
| name: macOS arm64 Release, | |
| os: macos-15, | |
| buildtype: release, | |
| args: -Ddefault_library=static -Dbuild_osx_bundle=true -Dlocal_boost=true --force-fallback-for=ffms2 | |
| } | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: '0' | |
| - uses: actions/setup-python@v6 | |
| with: | |
| python-version: '3.x' | |
| - name: Setup Meson | |
| run: | | |
| python -m pip install --upgrade pip setuptools | |
| pip install meson | |
| # Taken from https://github.com/libass/libass/blob/0.17.5/.github/workflows/meson.yml#L118-L125 | |
| - name: Find Visual Studio | |
| if: matrix.config.msvc | |
| run: | | |
| $vswhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" | |
| $vsPath = & $vswhere -latest -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | |
| if (-not $vsPath) { throw "Could not find a Visual Studio installation" } | |
| "VS=$vsPath" | |
| "VS=$vsPath" >> $env:GITHUB_ENV | |
| - name: Install dependencies (Windows) | |
| if: matrix.config.os == 'windows-latest' | |
| run: | | |
| choco install ninja innosetup | |
| $moonscripturl = "https://github.com/leafo/moonscript/releases/download/v0.6.0/moonscript-v0.6.0-windows-x86_64.zip" | |
| mkdir moonscript | |
| Invoke-WebRequest -Uri $moonscripturl -OutFile ".\moonscript\moonscript.zip" | |
| pushd moonscript | |
| 7z e moonscript.zip | |
| Get-Location | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append | |
| popd | |
| $gettexturl = "https://github.com/mlocati/gettext-iconv-windows/releases/download/v1.0-v1.18-r3/gettext1.0-iconv1.18-static-64.zip" | |
| Invoke-WebRequest -Uri $gettexturl -OutFile ".\gettext.zip" | |
| Expand-Archive ".\gettext.zip" -DestinationPath gettext | |
| pushd gettext/bin | |
| Get-Location | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append | |
| popd | |
| - name: Install dependencies (MacOS) | |
| if: startsWith(matrix.config.os, 'macos-') | |
| run: | | |
| brew update | |
| brew install ninja | |
| brew install libass zlib ffms2 fftw hunspell | |
| brew install pulseaudio # NO OpenAL in github CI | |
| - name: Install dependencies (Linux) | |
| if: startsWith(matrix.config.os, 'ubuntu-') | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install ninja-build build-essential libx11-dev libfreetype6-dev pkg-config libfontconfig1-dev libass-dev libasound2-dev libffms2-dev intltool libboost-all-dev libhunspell-dev libcurl4-openssl-dev libuchardet-dev libgtest-dev libgmock-dev libwxgtk3.2-dev libportal-gtk3-dev | |
| - name: Configure | |
| run: | | |
| ${{ matrix.config.devenv }} | |
| meson setup build ${{ matrix.config.args }} -Dbuildtype=${{ matrix.config.buildtype }} ${{ github.ref_type == 'tag' && '-Dofficial_release=true' || '' }} | |
| - name: Build | |
| run: | | |
| ${{ matrix.config.devenv }} | |
| meson compile -C build | |
| - name: Run test | |
| run: | | |
| ${{ matrix.config.devenv }} | |
| meson test -C build --verbose "gtest main" | |
| # Windows artifacts | |
| - name: Generate Windows installer | |
| if: matrix.config.os == 'windows-latest' | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| ${{ matrix.config.devenv }} | |
| meson compile win-installer -C build | |
| - name: Generate Windows portable installer | |
| if: matrix.config.os == 'windows-latest' | |
| run: | | |
| ${{ matrix.config.devenv }} | |
| cd build && ninja win-portable | |
| - name: Upload artifacts - win_installer | |
| uses: actions/upload-artifact@v6 | |
| if: matrix.config.os == 'windows-latest' | |
| with: | |
| name: ${{ matrix.config.name }} - installer | |
| path: build/Aegisub-*.exe | |
| if-no-files-found: error | |
| - name: Upload artifacts - portable.zip | |
| uses: actions/upload-artifact@v6 | |
| if: matrix.config.os == 'windows-latest' | |
| with: | |
| name: ${{ matrix.config.name }} - portable | |
| path: build/aegisub-portable-64.zip | |
| # macOS artifacts | |
| - name: Generate macOS installer | |
| if: startsWith(matrix.config.os, 'macos-') | |
| run: | | |
| meson compile osx-bundle -C build | |
| # Run osx-build-dmg but retry up to 10 times if it fails since hdiutil can be unreliable | |
| # See: https://github.com/actions/runner-images/issues/7522 | |
| max_tries=10 | |
| i=0 | |
| until meson compile osx-build-dmg -C build ; do | |
| if [ $i -eq $max_tries ]; then | |
| echo "Error: osx-build-dmg failed after ${max_tries} tries." | |
| exit 1 | |
| fi | |
| i=$((i+1)) | |
| done | |
| - name: Upload artifacts - macOS dmg | |
| uses: actions/upload-artifact@v6 | |
| if: startsWith(matrix.config.os, 'macos-') | |
| with: | |
| name: ${{ matrix.config.name }} - installer | |
| path: build/Aegisub-*.dmg | |
| if-no-files-found: error | |
| # Tarball | |
| - name: Generate tarball | |
| if: matrix.config.os == 'ubuntu-latest' && matrix.config.buildtype == 'release' | |
| run: | | |
| set -e | |
| meson dist --include-subprojects -C build | |
| # Make sure the subprojects we need are included | |
| mkdir distcheck | |
| tar -xJf build/meson-dist/*.tar.xz -C distcheck/ | |
| test -e distcheck/*/subprojects/luabins/meson.build | |
| test -e distcheck/*/subprojects/LuaJIT*/meson.build | |
| - name: Upload artifacts - tarball | |
| uses: actions/upload-artifact@v6 | |
| if: matrix.config.os == 'ubuntu-latest' && matrix.config.buildtype == 'release' | |
| with: | |
| name: Source Tarball | |
| path: build/meson-dist/*.tar.xz | |
| if-no-files-found: error |