Merge branch 'main' of github.com:streetpea/chiaki-ng #3
Workflow file for this run
This file contains 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 chiaki-ng weekly | |
on: | |
push: | |
tags: [ 'v*.*.*' ] | |
jobs: | |
create-release: | |
name: Upload release | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
ref: ${{ github.ref }} | |
- name: generate release notes | |
working-directory: ${{ github.workspace }} | |
run: | | |
echo -e "Linux Flatpak Release on Flathub as io.github.streetpea.Chiaki4deck\n" > release_notes.md | |
echo -e "Use brew to manage updates for the MacOS release with:\n" >> release_notes.md | |
echo -e "brew install --cask streetpea/streetpea/chiaki-ng\n" >> release_notes.md | |
echo -e "Windows Release (x86_64), MacOS Release (arm64 and x86_64), and Linux Appimage Release (arm64 and x86_64) attached.\n" >> release_notes.md | |
echo -e "Note: Pipewire required for appimage. For Linux pipewire is required for DualSense haptics.\nFor flatpak you can run with --env=SDL_AUDIODRIVER=pulse to use pulse instead of pipewire if you really want that (doing this means DualSense haptics won't work)\n" >> release_notes.md | |
echo -e "Note2: Appimage requires the following libraries to be installed on your system (these files need to be the correct ones for your system to work properly so can't be packaged with the appimage):\n```\nlibhidapi\nlibvulkan\nlibva\n```\n" >> release_notes.md | |
echo -e "## Updates\n" >> release_notes.md | |
git tag -l --format='%(contents)' ${GITHUB_REF_NAME} >> release_notes.md | |
- uses: ncipollo/release-action@v1 | |
id: maker | |
with: | |
prerelease: false | |
allowUpdates: true | |
bodyFile: "${{ github.workspace }}/release_notes.md" | |
outputs: | |
upload_url: ${{ steps.maker.outputs.upload_url }} | |
build-win_x64: | |
name: Build chiaki-ng win_x64 (VC) | |
runs-on: windows-latest | |
permissions: | |
contents: write | |
needs: create-release | |
env: | |
CC: clang-cl.exe | |
CXX: clang-cl.exe | |
VULKAN_SDK: C:\VulkanSDK\ | |
triplet: x64-windows | |
vcpkg_baseline: 42bb0d9e8d4cf33485afb9ee2229150f79f61a1f | |
VCPKG_INSTALLED_DIR: ./vcpkg_installed/ | |
dep_folder: deps | |
libplacebo_tag: v7.349.0 | |
defaults: | |
run: | |
shell: powershell | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: 'recursive' | |
- name: Setup Vulkan | |
run: | | |
$ProgressPreference = 'SilentlyContinue' | |
$ver = (Invoke-WebRequest -Uri "https://vulkan.lunarg.com/sdk/latest.json" | ConvertFrom-Json).windows | |
echo Version $ver | |
Invoke-WebRequest -Uri "https://sdk.lunarg.com/sdk/download/$ver/windows/VulkanSDK-$ver-Installer.exe" -OutFile VulkanSDK.exe | |
echo Downloaded | |
.\VulkanSDK.exe --root ${{ env.VULKAN_SDK }} --accept-licenses --default-answer --confirm-command install | |
- name: Set up Ninja | |
run: choco install ninja | |
- name: Set up Clang | |
uses: egor-tensin/setup-clang@v1 | |
with: | |
version: 18 | |
- name: Setup MSVC | |
uses: ilammy/msvc-dev-cmd@v1 | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.11" | |
architecture: "x64" | |
- name: Install pip dependencies | |
run: | | |
python3 -m pip install --upgrade pip | |
python3 -m pip install --upgrade setuptools wheel | |
python3 -m pip install --user --upgrade scons protobuf grpcio-tools pyinstaller | |
python3 -m pip install --user --upgrade meson | |
python3 -c 'import google.protobuf; print(google.protobuf.__file__)' | |
- name: Setup Qt | |
uses: jurplel/install-qt-action@v4 | |
with: | |
version: "6.7.*" | |
host: 'windows' | |
target: 'desktop' | |
modules: 'qtwebengine qtpositioning qtwebchannel qtwebsockets qtserialport' | |
- name: Setup ffmpeg | |
run: | | |
$ProgressPreference = 'SilentlyContinue' | |
Invoke-WebRequest -UseBasicParsing -Uri "https://github.com/r52/FFmpeg-Builds/releases/download/latest/ffmpeg-n7.1-latest-win64-gpl-shared-7.1.zip" -OutFile ".\ffmpeg-n7.1-latest-win64-gpl-shared-7.1.zip" | |
Expand-Archive -LiteralPath "ffmpeg-n7.1-latest-win64-gpl-shared-7.1.zip" -DestinationPath "." | |
Rename-Item "ffmpeg-n7.1-latest-win64-gpl-shared-7.1" "${{ env.dep_folder }}" | |
- name: Build SPIRV-Cross | |
run: | | |
git clone https://github.com/KhronosGroup/SPIRV-Cross.git | |
cd SPIRV-Cross | |
cmake ` | |
-DCMAKE_BUILD_TYPE=Release ` | |
-DCMAKE_INSTALL_PREFIX="${{ github.workspace }}\${{ env.dep_folder }}" ` | |
-DSPIRV_CROSS_SHARED=ON ` | |
-S . ` | |
-B build ` | |
-G Ninja | |
cmake --build build --config Release | |
cmake --install build | |
- name: Setup shaderc | |
run: | | |
$ProgressPreference = 'SilentlyContinue' | |
$url = ((Invoke-WebRequest -UseBasicParsing -Uri "https://storage.googleapis.com/shaderc/badges/build_link_windows_vs2019_release.html").Content | Select-String -Pattern 'url=(.*)"').Matches.Groups[1].Value | |
Invoke-WebRequest -UseBasicParsing -Uri $url -OutFile .\shaderc.zip | |
Expand-Archive -LiteralPath "shaderc.zip" -DestinationPath "." | |
cp "./install/*" "./${{ env.dep_folder }}" -Force -Recurse | |
rm "./install" -r -force | |
- name: Setup vcpkg | |
uses: lukka/run-vcpkg@v11 | |
with: | |
vcpkgGitCommitId: ${{ env.vcpkg_baseline }} | |
runVcpkgInstall: true | |
vcpkgJsonGlob: "vcpkg.json" | |
- name: Build libplacebo | |
run: | | |
git clone --recursive https://github.com/haasn/libplacebo.git | |
cd libplacebo | |
git checkout --recurse-submodules ${{ env.libplacebo_tag }} | |
meson setup ` | |
--prefix "${{ github.workspace }}\${{ env.dep_folder }}" ` | |
--native-file ../meson.ini ` | |
"--pkg-config-path=['${{ github.workspace }}\vcpkg_installed\${{ env.triplet }}\lib\pkgconfig','${{ github.workspace }}\vcpkg_installed\${{ env.triplet }}\share\pkgconfig','${{ github.workspace }}\${{ env.dep_folder }}\lib\pkgconfig']" ` | |
"--cmake-prefix-path=['${{ github.workspace }}\vcpkg_installed\${{ env.triplet }}', '${{ env.VULKAN_SDK }}', '${{ github.workspace }}\${{ env.dep_folder }}']" ` | |
-Dc_args="/I ${{ env.VULKAN_SDK }}Include" ` | |
-Dcpp_args="/I ${{ env.VULKAN_SDK }}Include" ` | |
-Dc_link_args="/LIBPATH:${{ env.VULKAN_SDK }}Lib" ` | |
-Dcpp_link_args="/LIBPATH:${{ env.VULKAN_SDK }}Lib" ` | |
-Ddemos=false ` | |
./build | |
ninja -C./build | |
ninja -C./build install | |
- name: Apply Patches | |
run: | | |
git apply --ignore-whitespace --verbose --directory=third-party/gf-complete/ scripts/windows-vc/gf-complete.patch | |
git apply --ignore-whitespace --verbose scripts/windows-vc/libplacebo-pc.patch | |
- name: Configure chiaki-ng | |
run: | | |
cmake ` | |
-S . ` | |
-B build ` | |
-G Ninja ` | |
-DCMAKE_TOOLCHAIN_FILE:STRING="vcpkg/scripts/buildsystems/vcpkg.cmake" ` | |
-DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE ` | |
-DCMAKE_BUILD_TYPE=Release ` | |
-DCHIAKI_ENABLE_CLI=OFF ` | |
-DCHIAKI_GUI_ENABLE_SDL_GAMECONTROLLER=ON ` | |
-DCHIAKI_ENABLE_STEAMDECK_NATIVE=OFF ` | |
-DCHIAKI_ENABLE_STEAM_SHORTCUT=OFF ` | |
-DPYTHON_EXECUTABLE="${{ env.pythonLocation }}\python.exe" ` | |
-DCMAKE_PREFIX_PATH="${{ github.workspace }}\${{ env.dep_folder }};${{ env.VULKAN_SDK }}" | |
- name: Build chiaki-ng | |
run: | | |
cmake --build build --config Release --clean-first --target chiaki | |
- name: Prepare Qt deployment package | |
run: | | |
mkdir chiaki-ng-Win | |
cp build\gui\chiaki.exe chiaki-ng-Win | |
cp scripts\qtwebengine_import.qml gui\src\qml\ | |
cp "${{ github.workspace }}\vcpkg_installed\${{ env.triplet }}\bin\libcrypto-*-x64.dll" chiaki-ng-Win | |
cp "${{ github.workspace }}\vcpkg_installed\${{ env.triplet }}\bin\libssl-*-x64.dll" chiaki-ng-Win | |
cp "${{ github.workspace }}\vcpkg_installed\${{ env.triplet }}\bin\SDL2.dll" chiaki-ng-Win | |
cp "${{ github.workspace }}\vcpkg_installed\${{ env.triplet }}\bin\hidapi.dll" chiaki-ng-Win | |
cp "${{ github.workspace }}\vcpkg_installed\${{ env.triplet }}\bin\fftw3.dll" chiaki-ng-Win | |
cp "${{ github.workspace }}\vcpkg_installed\${{ env.triplet }}\bin\opus.dll" chiaki-ng-Win | |
cp "${{ github.workspace }}\vcpkg_installed\${{ env.triplet }}\bin\libspeexdsp.dll" chiaki-ng-Win | |
cp "${{ github.workspace }}\vcpkg_installed\${{ env.triplet }}\bin\lcms2.dll" chiaki-ng-Win | |
cp "${{ github.workspace }}\vcpkg_installed\${{ env.triplet }}\bin\miniupnpc.dll" chiaki-ng-Win | |
cp "${{ github.workspace }}\vcpkg_installed\${{ env.triplet }}\bin\json-c.dll" chiaki-ng-Win | |
cp "${{ github.workspace }}\${{ env.dep_folder }}\bin\swresample-*.dll" chiaki-ng-Win | |
cp "${{ github.workspace }}\${{ env.dep_folder }}\bin\avcodec-*.dll" chiaki-ng-Win | |
cp "${{ github.workspace }}\${{ env.dep_folder }}\bin\avutil-*.dll" chiaki-ng-Win | |
cp "${{ github.workspace }}\${{ env.dep_folder }}\bin\avformat-*.dll" chiaki-ng-Win | |
cp "${{ github.workspace }}\${{ env.dep_folder }}\bin\libplacebo-*.dll" chiaki-ng-Win | |
cp "${{ github.workspace }}\${{ env.dep_folder }}\bin\shaderc_shared.dll" chiaki-ng-Win | |
cp "${{ github.workspace }}\${{ env.dep_folder }}\bin\spirv-cross-c-shared.dll" chiaki-ng-Win | |
windeployqt.exe --no-translations --qmldir=gui\src\qml --release chiaki-ng-Win\chiaki.exe | |
- name: Compile .ISS to .EXE Installer | |
uses: Minionguyjpro/[email protected] | |
with: | |
path: "scripts/chiaki-ng.iss" | |
options: /O+ | |
- name: Rename installer | |
run: | | |
cp chiaki-ng-windows-installer.exe chiaki-ng-win_x64-VC-installer.exe | |
- name: Upload chiaki-ng Artifact | |
uses: nanoufo/action-upload-artifacts-and-release-assets@v2 | |
with: | |
path: | | |
chiaki-ng-windows-installer.exe | |
upload-release-files: true | |
if-no-files-found: error | |
release-upload-url: ${{ needs.create-release.outputs.upload_url }} | |
build-mac_arm64_github: | |
name: Build macOSX arm64 version Github | |
runs-on: macos-14 | |
permissions: | |
contents: write | |
needs: create-release | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Install protobuf | |
run: | | |
pip3 install --user protobuf --break-system-packages | |
- name: Install brew dependencies | |
run: | | |
brew update | |
brew uninstall pkgconfig || true | |
brew install qt@6 ffmpeg pkgconfig opus openssl cmake ninja nasm sdl2 protobuf speexdsp libplacebo wget python-setuptools json-c miniupnpc | |
- name: Configure chiaki-ng | |
run: | | |
cmake -S . -B build -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DCHIAKI_ENABLE_CLI=OFF -DCHIAKI_ENABLE_STEAMDECK_NATIVE=OFF -DCMAKE_PREFIX_PATH="$(brew --prefix)/opt/@openssl@3;$(brew --prefix)/opt/qt@6" | |
- name: Build chiaki-ng | |
run: | | |
export CPATH=$(brew --prefix)/opt/ffmpeg/include | |
cmake --build build --config Release --clean-first --target chiaki | |
- name: Deploy chiaki-ng | |
run: | | |
cp -a build/gui/chiaki.app chiaki-ng.app | |
cp scripts/qtwebengine_import.qml gui/src/qml/ | |
$(brew --prefix)/opt/qt@6/bin/macdeployqt chiaki-ng.app -qmldir="$PWD/gui/src/qml" -libpath=$(brew --prefix)/lib | |
mkdir -p chiaki-ng.app/Contents/Resources/vulkan/icd.d | |
wget https://github.com/KhronosGroup/MoltenVK/releases/download/v1.2.9/MoltenVK-macos.tar && tar xf MoltenVK-macos.tar | |
cp MoltenVK/MoltenVK/dylib/macOS/* chiaki-ng.app/Contents/Resources/vulkan/icd.d | |
$(brew --prefix)/opt/qt@6/bin/macdeployqt chiaki-ng.app -qmldir="$PWD/gui/src/qml" -libpath=$(brew --prefix)/lib | |
ln -s ../../../../../../../Frameworks chiaki-ng.app/Contents/Frameworks/QtWebEngineCore.framework/Helpers/QtWebEngineProcess.app/Contents | |
ln -s libvulkan.1.dylib chiaki-ng.app/Contents/Frameworks/vulkan | |
codesign --force --entitlements gui/entitlements.xml --deep --sign - chiaki-ng.app | |
hdiutil create -srcfolder chiaki-ng.app chiaki-ng.dmg | |
codesign --force --entitlements gui/entitlements.xml --deep --sign - chiaki-ng.dmg | |
cp chiaki-ng.dmg chiaki-ng-macos_arm64-Release.dmg | |
- name: Upload chiaki-ng Artifact | |
uses: nanoufo/action-upload-artifacts-and-release-assets@v2 | |
with: | |
path: | | |
chiaki-ng-macos_arm64-Release.dmg | |
if-no-files-found: error | |
upload-release-files: true | |
release-upload-url: ${{ needs.create-release.outputs.upload_url }} | |
build-appimage_x64: | |
name: Build chiaki-ng appimage_x64 | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write | |
needs: create-release | |
steps: | |
- name: Setup Podman | |
run: | | |
sudo apt update | |
sudo apt-get -y install podman | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
submodules: 'recursive' | |
path: 'chiaki-ng' | |
- name: Add QmlWebEngine Import | |
working-directory: chiaki-ng | |
run: | | |
cp scripts/qtwebengine_import.qml gui/src/qml/ | |
- name: Run build script | |
working-directory: chiaki-ng | |
run: | | |
set -xe | |
podman run --rm \ | |
-v "`pwd`:/build/chiaki" \ | |
-w "/build/chiaki" \ | |
--device /dev/fuse \ | |
--cap-add SYS_ADMIN \ | |
-t docker.io/streetpea/chiaki-ng-builder:qt6.7 \ | |
/bin/bash -c "sudo -E scripts/build-appimage.sh /build/appdir" | |
cp appimage/chiaki-ng.AppImage appimage/chiaki-ng.AppImage_x86_64 | |
- name: Upload chiaki-ng Artifact | |
uses: nanoufo/action-upload-artifacts-and-release-assets@v2 | |
with: | |
path: | | |
chiaki-ng/appimage/chiaki-ng.AppImage_x86_64 | |
upload-release-files: true | |
if-no-files-found: error | |
release-upload-url: ${{ needs.create-release.outputs.upload_url }} | |
build-appimage_arm64: | |
name: Build chiaki-ng appimage_arm64 | |
runs-on: ubuntu-latest | |
steps: | |
- name: Setup Podman | |
run: | | |
sudo apt update | |
sudo apt-get -y install podman | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
submodules: 'recursive' | |
path: 'chiaki-ng' | |
- name: Add QmlWebEngine Import | |
working-directory: chiaki-ng | |
run: | | |
cp scripts/qtwebengine_import.qml gui/src/qml/ | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v3 | |
with: | |
platforms: "arm64" | |
- name: Run build script | |
working-directory: chiaki-ng | |
run: | | |
set -xe | |
podman run --rm \ | |
-v "`pwd`:/build/chiaki" \ | |
-w "/build/chiaki" \ | |
--platform linux/arm64 \ | |
--device /dev/fuse \ | |
--cap-add SYS_ADMIN \ | |
-t docker.io/streetpea/chiaki-ng-builder:qt6.7 \ | |
/bin/bash -c "sudo -E scripts/build-appimage.sh /build/appdir" | |
cp appimage/chiaki-ng.AppImage appimage/chiaki-ng.AppImage_arm64 | |
- name: Upload chiaki-ng Artifact | |
uses: nanoufo/action-upload-artifacts-and-release-assets@v2 | |
with: | |
path: | | |
chiaki-ng/appimage/chiaki-ng.AppImage_arm64 | |
upload-release-files: true | |
if-no-files-found: error | |
release-upload-url: ${{ needs.create-release.outputs.upload_url }} |