More adventures in build scripts #4
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: Combined CI | |
| on: | |
| push: | |
| pull_request: | |
| jobs: | |
| build_flatpak: | |
| runs-on: ubuntu-latest | |
| container: | |
| image: bilelmoussaoui/flatpak-github-actions:gnome-nightly | |
| options: --privileged | |
| steps: | |
| - uses: actions/checkout@v2 | |
| - name: Purge .git for space reasons | |
| run: rm -rf /home/runner/work/Project-Plus-Dolphin/Project-Plus-Dolphin/.git | |
| - name: Setup Packages | |
| run: | | |
| flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo && \ | |
| flatpak install org.kde.Sdk//5.15 org.kde.Platform//5.15 -y && \ | |
| dnf install libusb1-devel cmake git gcc-c++ libXext-devel libgudev qt6-qtbase-devel systemd-devel openal-soft-devel libevdev-devel libao-devel SOIL-devel libXrandr-devel pulseaudio-libs-devel bluez-libs-devel p7zip SDL2-devel make automake gcc gcc-c++ kernel-devel -y | |
| - name: Run Flatpak Builder | |
| uses: flatpak/flatpak-github-actions/flatpak-builder@v6 | |
| with: | |
| manifest-path: Distribution/flatpak.yml | |
| bundle: Project-Plus-Dolphin-flatpak-linux-x86_64.flatpak | |
| build_macos: | |
| runs-on: macos11-x64-nayla | |
| steps: | |
| - uses: actions/checkout@v2 | |
| - name: Setup Submodules | |
| run: git config --global --add safe.directory . && git submodule update --init --recursive | |
| - name: Build | |
| run: | | |
| mkdir -p build && cd build && cmake .. -G Ninja -DCMAKE_CXX_FLAGS="-Xclang -fcolor-diagnostics" -DCMAKE_PREFIX_PATH=$(brew --prefix qt6) -DDISTRIBUTOR="Project Plus" && ninja -j8 | |
| - name: Prepare macOS Build Artifact | |
| # yes we have to double zip to preserve perms. | |
| run: | | |
| mv build/Binaries/Project-Plus-Dolphin.app build/Binaries/Project-Plus-Dolphin.app | |
| mkdir -p build/OUT | |
| mv build/Binaries/Project-Plus-Dolphin.app build/OUT/ | |
| cd build/OUT | |
| xattr -cr Project-Plus-Dolphin.app | |
| zip -r Project-Plus-Dolphin-macOS-x86_64.zip Project-Plus-Dolphin.app | |
| rm -rf Project-Plus-Dolphin.app | |
| - name: Upload Build Artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: Project-Plus-Dolphin-macOS-x86_64 | |
| path: build/OUT/ | |
| build_windows: | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| build_type: [ Netplay ] | |
| include: | |
| - build_type: Netplay | |
| artifact_name: windows64-netplay | |
| build_config: -G "Ninja" -DCMAKE_SYSTEM_VERSION="10.0.22621" -DCMAKE_BUILD_TYPE="Release" -DQt6_DIR:STRING="D:\a\dolphin\dolphin\Externals\Qt\Qt6.3.0\x64\lib\cmake\Qt6\" | |
| env: | |
| DXSDK_DIR: "C:\\Program Files (x86)\\Microsoft DirectX SDK (June 2010)\\" | |
| name: "Windows ${{ matrix.build_type }}" | |
| runs-on: windows-2022 | |
| steps: | |
| - name: "Checkout" | |
| uses: actions/checkout@v2 | |
| with: | |
| submodules: recursive | |
| - name: 'Fetch Git Tags' | |
| shell: bash | |
| if: success() | |
| run: | | |
| git fetch --prune --unshallow | |
| echo "GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD)" >> $GITHUB_ENV | |
| echo "GIT_HASH=$(git rev-parse --short HEAD)" >> $GITHUB_ENV | |
| echo "GIT_TAG=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV | |
| echo "CURR_DATE=$(date +%Y-%m-%d)" >> $GITHUB_ENV | |
| - uses: seanmiddleditch/gha-setup-ninja@master | |
| - uses: egor-tensin/vs-shell@v2 | |
| # - name: "Install Windows SDK" | |
| # shell: pwsh | |
| # working-directory: ${{ github.workspace }} | |
| # run: | | |
| # powershell -NoLogo -Sta -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command ./install-windows-sdk.ps1 22621 | |
| - name: "Build ${{ matrix.build_type }} Dolphin" | |
| shell: cmd | |
| working-directory: ${{ github.workspace }} | |
| run: | | |
| SET PATH=%PATH%;C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64;C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x86;C:\Program Files\7-Zip;C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin;C:\Python27\;C:\Python27\Scripts;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja;C:\Program Files\Microsoft VS Code\bin;C:\Program Files\Git\cmd | |
| cd ./Source | |
| msbuild.exe /v:m /p:Platform=x64 /p:Configuration=Release dolphin-emu.sln | |
| - name: "Package ${{ matrix.build_type }}" | |
| working-directory: ${{ github.workspace }} | |
| run: | | |
| Xcopy /Y /E /I .\Data\Sys .\Binary\x64\Sys | |
| cd .\Binary\x64\ | |
| fsutil file createnew FIX-VCRUNTIME140-ERROR.txt 0 | |
| echo "Download and install this: https://aka.ms/vs/16/release/vc_redist.x64.exe" > .\FIX-VCRUNTIME140-ERROR.txt | |
| - name: Package Artifact | |
| working-directory: ${{ github.workspace }} | |
| run: | | |
| $FILE_NAME="${{ env.CURR_DATE }}-${{ env.GIT_HASH }}-${{ env.GIT_TAG }}-${{ matrix.artifact_name }}.zip" | |
| mkdir artifact | |
| cd .\Binary\x64\ | |
| fsutil file createnew portable.txt 0 | |
| 7z a $FILE_NAME .\* | |
| move $FILE_NAME ..\..\artifact\ | |
| - name: "Publish" | |
| if: success() | |
| uses: actions/upload-artifact@v2-preview | |
| with: | |
| name: ${{ matrix.artifact_name }} | |
| path: "./artifact/" | |
| build_appimage: | |
| name: Project Plus Dolphin bundled as appimage | |
| runs-on: ubuntu-24.04 | |
| env: | |
| yaqti: 6.7.3 | |
| steps: | |
| - name: Checkout Upstream Repo | |
| uses: actions/checkout@v4 | |
| with: | |
| repository: dolphin-emu/dolphin | |
| ref: master | |
| - name: Checkout Submodules | |
| if: steps.cache-submodules.outputs.cache-hit != 'true' | |
| run: git submodule update --init --recursive -j $(getconf _NPROCESSORS_ONLN) | |
| - name: Checkout AppImage Repo | |
| uses: actions/checkout@v4 | |
| with: | |
| clean: false | |
| path: ci | |
| # Runs the Dolphin action | |
| - name: Get Date | |
| id: get-date | |
| run: | | |
| echo "date=$(/bin/date -u "+%Y%m%d")" >> $GITHUB_OUTPUT | |
| shell: bash | |
| - name: cache | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.ccache | |
| key: build-ccache-${{ steps.get-date.outputs.date }} | |
| restore-keys: | | |
| build-ccache- | |
| env: | |
| CCACHE_MAXSIZE: 200M | |
| - name: Install Qt | |
| run: | | |
| curl -sLO https://files.pythonhosted.org/packages/47/42/351389ca36c7adfc5f4e92d086cdb2bdbde13f1b89ee882f4a1cab2183ac/yaqti-2021.7.29-py3-none-any.whl | |
| python3 -m pip install yaqti-2021.7.29-py3-none-any.whl | |
| pyver=$(python3 --version | awk '{print $2}') | |
| curl -sL https://raw.githubusercontent.com/qurious-pixel/yaqti/fetch/yaqti/fetchers.py -o $HOME/.local/lib/python${pyver%.*}/site-packages/yaqti/fetchers.py | |
| python -m yaqti install --os linux --platform desktop --version ${{ env.yaqti }} --modules linux_gcc_64 --set-envs --install-deps | |
| - name: Install Packages | |
| run: | | |
| sudo apt-get install -y build-essential dialog dpkg libbluetooth-dev liblz4-dev liblzma-dev libssl-dev libopus-dev libpng-dev libsystemd-dev \ | |
| libzip-dev libzstd-dev zlib1g-dev libasound2-dev libpulse-dev pulseaudio p7zip p7zip-full libsfml-dev libminiupnpc-dev libmbedtls-dev libpugixml-dev \ | |
| libbz2-dev liblzo2-dev libxi-dev libavcodec-dev libudev-dev libusb-1.0-0-dev libevdev-dev libc6-dev libhidapi-dev libavformat-dev libavdevice-dev \ | |
| libfmt-dev libwayland-dev libxrandr-dev libglu1-mesa-dev libcurl4-openssl-dev x11-utils zenity wget curl git gettext ccache make cmake ninja-build \ | |
| libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-icccm4 libxcb-image0-dev libxcb-cursor-dev | |
| - name: Dolphin-Build Number | |
| run: | | |
| export LASTCOMMIT=$(git log --pretty=format:%H -1) | |
| export DOLPHINVER=$(wget -qO- https://dolphin-emu.org/download/dev/${LASTCOMMIT} | grep '<title>' | awk '{print $NF}' | cut -d '<' -f 1) | |
| echo "DOLPHIN Build $DOLPHINVER" | |
| echo "DOLPHINVER=$DOLPHINVER" >> $GITHUB_ENV | |
| sed -i "s|\${DOLPHIN_WC_DESCRIBE}|$DOLPHINVER|g" Source/Core/Common/scmrev.h.in | |
| - name: Update Patchelf | |
| run: | | |
| PATCHELFVER=0.14.5 | |
| curl -sL https://github.com/NixOS/patchelf/releases/download/${PATCHELFVER}/patchelf-${PATCHELFVER}-x86_64.tar.gz -o /tmp/patchelf.tar.gz | |
| tar -xvf /tmp/patchelf.tar.gz --directory /tmp/ ./bin/patchelf --strip-components=2 | |
| sudo mv /tmp/patchelf /usr/bin | |
| patchelf --version | |
| - name: Build Dolphin | |
| run: | | |
| export Qt_DIR="${{github.workspace}}/qt/${{ env.yaqti }}/gcc_64/lib/cmake/Qt6" | |
| mkdir -p "$HOME/.ccache" | |
| mkdir build | |
| cd build | |
| cmake .. -GNinja -DCMAKE_C_COMPILER=/usr/lib/ccache/gcc-13 -DCMAKE_CXX_COMPILER=/usr/lib/ccache/g++-13 -DCMAKE_PREFIX_PATH="${{github.workspace}}/qt/${{ env.yaqti }}/gcc_64/" -Ddatadir:PATH="share/dolphin-emu" -DBIN_INSTALL_DIR="install/usr/bin" -DCMAKE_INSTALL_PREFIX="install/usr" -DINC_INSTALL_DIR="install/usr/include" -DLIB_INSTALL_DIR="install/usr/lib" -DPKGCONFIG_INSTALL_DIR="install/usr/lib/pkgconfig" -DCMAKE_POLICY_VERSION_MINIMUM=3.5 -DENABLE_NOGUI=OFF | |
| ninja | |
| - name: Install Dolphin | |
| run: | | |
| cd build | |
| ninja install | |
| - name: Package Dolphin-Binary | |
| run: | | |
| mkdir -p $GITHUB_WORKSPACE/{artifacts,uploads} | |
| cp -P build/install/usr/bin/dolphin-emu $GITHUB_WORKSPACE/artifacts | |
| - name: Package Dolphin-AppImage | |
| env: | |
| QT_BASE_DIR: /qt/${{ env.yaqti }}/gcc_64 | |
| QTDIR: $QT_BASE_DIR | |
| run: | | |
| export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${GITHUB_WORKSPACE}/qt/${{ env.yaqti }}/gcc_64/lib/ | |
| export PATH=$QT_BASE_DIR/bin:$PATH | |
| echo "PATH $PATH" | |
| sudo ln -s ${GITHUB_WORKSPACE}/$(find qt/ -name qmake) /usr/bin | |
| qmake -v | |
| cd /tmp | |
| curl -sSfLO "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage" | |
| curl -sSfLO "https://github.com/AppImage/AppImageUpdate/releases/download/continuous/AppImageUpdate-x86_64.AppImage" | |
| chmod a+x linuxdeploy*.AppImage | |
| chmod a+x AppImageUpdate-x86_64.AppImage | |
| ./linuxdeploy-x86_64.AppImage --appimage-extract | |
| curl -sSfL "https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage" -o /tmp/squashfs-root/usr/bin/linuxdeploy-plugin-qt.AppImage | |
| chmod a+x /tmp/squashfs-root/usr/bin/linuxdeploy-plugin-qt.AppImage | |
| mv /tmp/squashfs-root/usr/bin/patchelf /tmp/squashfs-root/usr/bin/patchelf.orig | |
| sudo cp /usr/bin/patchelf /tmp/squashfs-root/usr/bin/patchelf | |
| cd $GITHUB_WORKSPACE | |
| mkdir -p squashfs-root | |
| cp -a build/install/usr $GITHUB_WORKSPACE/squashfs-root/ | |
| cp Data/dolphin-emu.svg ./squashfs-root/dolphin-emu.svg | |
| cp Data/dolphin-emu.desktop ./squashfs-root/dolphin-emu.desktop | |
| curl -sSfL https://github.com/AppImage/AppImageKit/releases/download/continuous/runtime-x86_64 -o ./squashfs-root/runtime | |
| curl -sSfL "https://github.com/RPCS3/AppImageKit-checkrt/releases/download/continuous2/AppRun-patched-x86_64" -o ./squashfs-root/AppRun-patched | |
| cp ci/travis/appimage/{AppRun,update.sh} ./squashfs-root/ | |
| mv /tmp/AppImageUpdate-x86_64.AppImage ./squashfs-root/usr/bin/AppImageUpdate | |
| echo ${{ env.DOLPHINVER }} > ./squashfs-root/version.txt | |
| chmod a+x ./squashfs-root/AppRun | |
| chmod a+x ./squashfs-root/runtime | |
| chmod a+x ./squashfs-root/AppRun-patched | |
| chmod a+x ./squashfs-root/update.sh | |
| export UPD_INFO="gh-releases-zsync|Motobug|Project-Plus-Dolphin|continuous|Dolphin_Emulator-x86_64.AppImage.zsync" | |
| /tmp/squashfs-root/AppRun --appdir="$GITHUB_WORKSPACE"/squashfs-root/ --plugin qt -d "$GITHUB_WORKSPACE"/squashfs-root/dolphin-emu.desktop -i "$GITHUB_WORKSPACE"/squashfs-root/dolphin-emu.svg \ | |
| --exclude-library=libglib* --output appimage | |
| ls . | grep *.AppImage | |
| mv $(ls . | grep *.AppImage) $GITHUB_WORKSPACE/artifacts | |
| ls -al $GITHUB_WORKSPACE/artifacts | |
| sed -i 's/AppRun.wrapped/AppRun-patched/g' "$GITHUB_WORKSPACE"/squashfs-root/AppRun | |
| cat "$GITHUB_WORKSPACE"/squashfs-root/AppRun | |
| /tmp/squashfs-root/usr/bin/linuxdeploy-plugin-appimage --appdir="$GITHUB_WORKSPACE"/squashfs-root/ | |
| ls . | grep *.AppImage | |
| mv Dolphin_Emulator-x86_64.AppImage $GITHUB_WORKSPACE/uploads/Dolphin_${DOLPHINVER}.AppImage | |
| ls -al $GITHUB_WORKSPACE/uploads | |
| continue-on-error: true | |
| - name: Upload Static Build | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: Project-Plus-Dolphin_${{ env.DOLPHINVER }} | |
| path: uploads/ | |
| env: | |
| DEFAULT_BRANCH: git-actions | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |