Move application configuration in settings #4130
Workflow file for this run
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 | |
| on: | |
| push: | |
| pull_request: | |
| env: | |
| BUILD_TYPE: Release | |
| SERVER_DEPS: libx264-dev libavcodec-dev libavutil-dev libbsd-dev libavahi-client-dev libavahi-glib-dev libeigen3-dev nlohmann-json3-dev librsvg2-dev libdrm-dev libglib2.0-dev-bin libpipewire-0.3-dev libpulse-dev libcli11-dev libnotify-dev libarchive-dev libudev-dev | |
| jobs: | |
| build-linux: | |
| name: Linux | |
| runs-on: ubuntu-24.04 | |
| if: ${{ vars.APK_ONLY == '' }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| config: | |
| - preset: 'client' | |
| packages: libboost-all-dev libharfbuzz-dev libfreetype-dev libavcodec-dev libavutil-dev libswscale-dev librsvg2-bin gettext libcurl4-openssl-dev libfontconfig-dev | |
| # dashboard requires a more recent Ubuntu, have it out of this job | |
| - preset: 'dissector-no-system-boost' | |
| packages: libboost-all-dev wireshark-dev | |
| - preset: 'server' | |
| packages: libboost-all-dev libsystemd-dev | |
| - preset: 'server-no-systemd' | |
| packages: libboost-all-dev | |
| - preset: 'server-no-system-boost' | |
| packages: libsystemd-dev | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Apt dependencies | |
| uses: awalsh128/cache-apt-pkgs-action@v1.6.0 | |
| with: | |
| packages: ccache ${{matrix.config.packages}} ${{ startsWith(matrix.config.preset, 'server') && env.SERVER_DEPS || ''}} | |
| - name: ccache | |
| uses: hendrikmuhs/ccache-action@v1.2 | |
| with: | |
| key: linux-${{matrix.config.preset}} | |
| job-summary: "" | |
| restore-keys: linux- | |
| append-timestamp: false | |
| - uses: actions/cache@v4 | |
| with: | |
| key: cmake-linux-${{matrix.config.preset}} | |
| path: | | |
| ${{github.workspace}}/cmake-fetch/*-subbuild/*-populate-prefix/src/*.tar.* | |
| ${{github.workspace}}/cmake-fetch/*-subbuild/*-populate-prefix/src/*.zip | |
| ${{github.workspace}}/cmake-fetch/*.tar.* | |
| ${{github.workspace}}/cmake-fetch/*.tgz | |
| restore-keys: cmake-linux- | |
| - name: Install dependencies | |
| if: ${{ matrix.config.preset == 'client' }} | |
| run: | | |
| wget https://github.com/KhronosGroup/KTX-Software/releases/download/v4.4.2/KTX-Software-4.4.2-Linux-x86_64.deb | |
| sudo dpkg --install KTX-Software-4.4.2-Linux-x86_64.deb | |
| npm install --global @gltf-transform/cli@4.1.1 | |
| - name: Prepare Vulkan SDK | |
| uses: humbletim/setup-vulkan-sdk@v1.2.1 | |
| with: | |
| vulkan-query-version: 1.3.296.0 | |
| vulkan-components: Vulkan-Headers, Vulkan-Loader, Glslang, SPIRV-Reflect, SPIRV-Tools | |
| vulkan-use-cache: true | |
| - name: Configure CMake | |
| # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. | |
| # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type | |
| run: > | |
| cmake -B ${{github.workspace}}/build | |
| -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} | |
| -DFETCHCONTENT_BASE_DIR=${{github.workspace}}/cmake-fetch | |
| -DCMAKE_C_COMPILER_LAUNCHER=ccache | |
| -DCMAKE_CXX_COMPILER_LAUNCHER=ccache | |
| --preset ${{ matrix.config.preset }} | |
| -DWIVRN_USE_SYSTEM_OPENXR=OFF | |
| - name: Package build dependencies | |
| if: ${{ matrix.config.preset == 'server' }} | |
| # For easier packaging, build dependencies are made available as a separate archive | |
| run: (cd ${{github.workspace}}/cmake-fetch ; tar --create --xz *-src) > ${{github.workspace}}/server-build-deps.tar.xz | |
| - name: Build | |
| # Build your program with the given configuration | |
| run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} | |
| - name: Publish build dependencies | |
| if: ${{ matrix.config.preset == 'server' }} | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: server-build-deps | |
| path: server-build-deps.tar.xz | |
| - name: Release build dependencies | |
| uses: softprops/action-gh-release@v2 | |
| if: startsWith(github.ref, 'refs/tags/') && matrix.config.preset == 'server' | |
| with: | |
| tag_name: ${{ inputs.ref }} | |
| generate_release_notes: true | |
| draft: true | |
| files: server-build-deps.tar.xz | |
| build-dashboard: | |
| #FIXME: merge with the matrixed build once Ubuntu gets updated | |
| name: Linux Dashboard | |
| runs-on: ubuntu-24.04 | |
| container: ubuntu:plucky | |
| if: ${{ vars.APK_ONLY == '' }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Prepare | |
| run: | | |
| apt-get update | |
| apt-get install --yes curl wget sudo jq cmake gcc g++ git pkgconf libboost-all-dev libkirigami-dev gettext libarchive-dev nlohmann-json3-dev qcoro-qt6-dev libkf6i18n-dev libkf6coreaddons-dev libkf6qqc2desktopstyle-dev libkf6iconthemes-dev libvulkan-dev libssl-dev librsvg2-dev extra-cmake-modules | |
| - uses: actions/cache@v4 | |
| with: | |
| key: cmake-linux-dashboard | |
| path: | | |
| ${{github.workspace}}/cmake-fetch/*-subbuild/*-populate-prefix/src/*.tar.* | |
| ${{github.workspace}}/cmake-fetch/*-subbuild/*-populate-prefix/src/*.zip | |
| ${{github.workspace}}/cmake-fetch/*.tar.* | |
| ${{github.workspace}}/cmake-fetch/*.tgz | |
| restore-keys: cmake-linux- | |
| - name: Configure CMake | |
| # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. | |
| # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type | |
| run: > | |
| cmake -B ${{github.workspace}}/build | |
| -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} | |
| -DFETCHCONTENT_BASE_DIR=${{github.workspace}}/cmake-fetch | |
| --preset dashboard | |
| -DWIVRN_USE_SYSTEM_OPENXR=OFF | |
| - name: Build | |
| # Build your program with the given configuration | |
| run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} | |
| build-server-flatpak: | |
| name: Linux server (flatpak) | |
| runs-on: ubuntu-24.04 | |
| if: ${{ vars.APK_ONLY == '' }} | |
| container: | |
| image: ghcr.io/flathub-infra/flatpak-github-actions:kde-6.9 | |
| options: --privileged | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Create the flatpak manifest | |
| run: | | |
| git config --global --add safe.directory $(pwd) | |
| pip install toml aiohttp | |
| tools/gen_flatpak_manifest.py --gitlocal --out flatpak | |
| cat flatpak/io.github.wivrn.wivrn.yml | |
| - uses: flatpak/flatpak-github-actions/flatpak-builder@v6.4 | |
| with: | |
| manifest-path: flatpak/io.github.wivrn.wivrn.yml | |
| bundle: wivrn-server.flatpak | |
| upload-artifact: false | |
| # Upload manually instead of using flatpak/flatpak-github-actions/flatpak-builder because | |
| # it uses upload-artifact@v3 | |
| - name: Publish artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: wivrn-flatpak-x86_64 | |
| path: wivrn-server.flatpak | |
| - name: Debug bundle | |
| uses: actions/upload-artifact@v4 | |
| if: failure() | |
| with: | |
| name: flatpak-debug | |
| path: .flatpak-builder | |
| include-hidden-files: true | |
| retention-days: 1 | |
| nix-test: | |
| name: Test Nix package and devshell | |
| runs-on: ubuntu-24.04 | |
| if: ${{ vars.APK_ONLY == '' }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - uses: cachix/install-nix-action@v31 | |
| - run: nix flake check | |
| - run: nix build --print-build-logs | |
| build-android: | |
| name: Android | |
| runs-on: ubuntu-24.04 | |
| if: ${{ vars.APK_ONLY == '' }} | |
| strategy: | |
| matrix: | |
| buildtype: ['Release', 'Debug', 'DebugWithValidationLayer', 'Oculus'] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Prepare Vulkan SDK | |
| uses: humbletim/setup-vulkan-sdk@v1.2.1 | |
| with: | |
| vulkan-query-version: 1.3.296.0 | |
| vulkan-components: Glslang, SPIRV-Tools | |
| vulkan-use-cache: true | |
| - uses: actions/cache@v4 | |
| with: | |
| key: cmake-android-${{matrix.buildtype}} | |
| path: | | |
| ${{github.workspace}}/cmake-fetch/*-subbuild/*-populate-prefix/src/*.tar.* | |
| ${{github.workspace}}/cmake-fetch/*-subbuild/*-populate-prefix/src/*.zip | |
| ${{github.workspace}}/cmake-fetch/*.tar.* | |
| ${{github.workspace}}/cmake-fetch/*.zip | |
| ${{github.workspace}}/cmake-fetch/*.tgz | |
| restore-keys: cmake-android- | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update && sudo apt-get install glslang-tools librsvg2-bin gettext | |
| wget https://github.com/KhronosGroup/KTX-Software/releases/download/v4.3.2/KTX-Software-4.3.2-Linux-x86_64.deb | |
| sudo dpkg --install KTX-Software-4.3.2-Linux-x86_64.deb | |
| npm install --global @gltf-transform/cli | |
| - name: Check for Secret availability | |
| id: secret-check | |
| shell: bash | |
| run: | | |
| if [[ "${{ secrets.APK_SIGNINGKEYPASSWORD }}" != '' && "${{ secrets.APK_KEYSTORE_BASE64 }}" != '' ]]; then | |
| echo "available=true" >> $GITHUB_OUTPUT; | |
| else | |
| echo "available=false" >> $GITHUB_OUTPUT; | |
| fi | |
| if [[ "${{ secrets.OCULUS_TOKEN }}" != '' ]]; then | |
| echo "oculus-token=true" >> $GITHUB_OUTPUT; | |
| else | |
| echo "oculus-token=false" >> $GITHUB_OUTPUT; | |
| fi | |
| - name: Secrets | |
| if: ${{ steps.secret-check.outputs.available == 'true' }} | |
| env: | |
| APK_SIGNINGKEYPASSWORD: ${{ secrets.APK_SIGNINGKEYPASSWORD }} | |
| APK_KEYSTORE_BASE64: ${{ secrets.APK_KEYSTORE_BASE64 }} | |
| run: | | |
| echo signingKeyPassword="$APK_SIGNINGKEYPASSWORD" > gradle.properties | |
| echo "$APK_KEYSTORE_BASE64" | base64 --decode --ignore-garbage > ks.keystore | |
| - name: Build | |
| run: | | |
| VERSION=$(git describe --tags --always | sed "s/^v\([0-9]\)/\1/") | |
| if [ ${{ matrix.buildtype }} = 'Oculus' ] | |
| then | |
| SUFFIX="" | |
| VERSION_CODE=$(( 2 * $(git rev-list --count HEAD) )) | |
| if [ ${{ github.ref_type }} = 'tag' ] | |
| then | |
| VERSION_CODE=$(( $VERSION_CODE + 1 )) | |
| fi | |
| CSS=images/wivrn-release.css | |
| APPNAME=WiVRn | |
| else | |
| VERSION_CODE=1 | |
| if [ ${{ github.ref_type }} = 'tag' ] | |
| then | |
| SUFFIX=".github" | |
| CSS=images/wivrn-release.css | |
| APPNAME="WiVRn" | |
| else | |
| SUFFIX=".github.testing" | |
| CSS=images/wivrn-nightly.css | |
| APPNAME="WiVRn Testing" | |
| fi | |
| fi | |
| echo Setting version $VERSION and version code $VERSION_CODE in manifest | |
| echo Using stylesheet $CSS and name $APPNAME | |
| chmod +x gradlew | |
| ./gradlew \ | |
| -Pwivrn_version=$VERSION \ | |
| -Pwivrn_versionCode=$VERSION_CODE \ | |
| -Psuffix=$SUFFIX \ | |
| -Pwivrn_css=$CSS \ | |
| -Pwivrn_app_name="$APPNAME" \ | |
| -Pwivrn_compress_glb=ON \ | |
| -Pfetchcontent_base_dir=${{github.workspace}}/cmake-fetch \ | |
| assemble${{ matrix.buildtype }} | |
| - name: Upload build dir | |
| uses: actions/upload-artifact@v4 | |
| if: failure() | |
| with: | |
| name: android-cxx-debug-${{ matrix.buildtype }} | |
| path: .cxx | |
| include-hidden-files: true | |
| retention-days: 1 | |
| - name: Prepare before archiving artifacts | |
| run: | | |
| mkdir apk | |
| mv $(find build/outputs/apk/ -name "*.apk") apk/ | |
| mkdir debug | |
| mv build/intermediates/merged_native_libs/*/*/out/lib/* debug/ | |
| find debug -name libopenxr_loader.so -delete | |
| - name: Archive APK | |
| uses: actions/upload-artifact@v4 | |
| if: ${{ matrix.buildtype != 'Oculus' }} | |
| with: | |
| name: apk-${{ (steps.secret-check.outputs.available == 'false' && matrix.buildtype == 'Release') && 'Release-unsigned' || matrix.buildtype }} | |
| path: apk/*.apk | |
| retention-days: 30 | |
| - name: Archive debug symbols | |
| if: ${{ matrix.buildtype != 'Release' && matrix.buildtype != 'Oculus' }} | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: symbols-${{ matrix.buildtype }} | |
| path: debug/**/*.so | |
| retention-days: 30 | |
| - name: Push to Oculus store | |
| if: ${{ matrix.buildtype == 'Oculus' && (startsWith(github.ref, 'refs/tags/') || github.ref == 'refs/heads/master') && steps.secret-check.outputs.oculus-token == 'true' }} | |
| env: | |
| OCULUS_TOKEN: ${{ secrets.OCULUS_TOKEN }} | |
| run: | | |
| curl -L 'https://www.oculus.com/download_app/?id=5159709737372459' -o ovr-platform-util | |
| chmod +x ovr-platform-util | |
| if [ ${{ github.ref_type }} = 'tag' ] | |
| then | |
| CHANNEL=RC | |
| IS_DRAFT=--draft | |
| else | |
| CHANNEL=NIGHTLY | |
| IS_DRAFT= | |
| fi | |
| ./ovr-platform-util upload-quest-build --app-id 7959676140827574 --token $OCULUS_TOKEN --apk apk/WiVRn-oculus.apk --channel $CHANNEL --age-group TEENS_AND_ADULTS $IS_DRAFT --debug_symbols_dir debug/ --debug-symbols-pattern '*.so' | |
| build-ubuntu: | |
| name: Build Ubuntu package | |
| if: ${{ vars.APK_ONLY == '' }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| distro: ['plucky'] | |
| runs-on: ubuntu-24.04 | |
| container: ubuntu:${{ matrix.distro }} | |
| steps: | |
| - name: Install dependencies | |
| run: | | |
| apt update | |
| apt install --yes libcjson-dev libx264-dev libavcodec-dev libavutil-dev libswscale-dev libavfilter-dev libbsd-dev libavahi-client-dev libavahi-glib-dev libeigen3-dev glslang-tools libudev-dev libwayland-dev libx11-xcb-dev libxrandr-dev libxcb-randr0-dev libgl-dev libglx-dev mesa-common-dev libgl1-mesa-dev libglu1-mesa-dev libsystemd-dev libva-dev nlohmann-json3-dev libpulse-dev xz-utils libpipewire-0.3-dev libcli11-dev qt6-base-dev qt6-tools-dev pkexec libboost-all-dev librsvg2-bin dpkg-dev pkg-config debhelper-compat build-essential lintian cmake libnotify-dev qt6-declarative-dev extra-cmake-modules libkirigami-dev libkf6i18n-dev libkf6coreaddons-dev libkf6qqc2desktopstyle-dev libkf6iconthemes-dev jq sudo cmake gcc g++ git wget libssl-dev qcoro-qt6-dev librsvg2-dev libarchive-dev npm | |
| wget https://github.com/KhronosGroup/KTX-Software/releases/download/v4.3.2/KTX-Software-4.3.2-Linux-x86_64.deb | |
| sudo dpkg --install KTX-Software-4.3.2-Linux-x86_64.deb | |
| npm install --global @gltf-transform/cli | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| path: wivrn | |
| - name: Download monado | |
| run: | | |
| MONADO_COMMIT=$(cat wivrn/monado-rev) | |
| wget https://gitlab.freedesktop.org/monado/monado/-/archive/$MONADO_COMMIT/monado-$MONADO_COMMIT.tar.gz | |
| mkdir wivrn/monado-src | |
| tar xzf monado-*.tar.gz --strip-components=1 -C wivrn/monado-src | |
| - name: Patch monado | |
| working-directory: wivrn/monado-src | |
| run: > | |
| for p in ../patches/monado/*; do | |
| patch -p1 --fuzz=0 --forward < "$p" | |
| done | |
| - name: Download stb | |
| run: | | |
| wget https://github.com/nothings/stb/archive/013ac3beddff3dbffafd5177e7972067cd2b5083.tar.gz -O stb.tar.gz | |
| mkdir wivrn/stb-src | |
| tar xzf stb.tar.gz --strip-components=1 -C wivrn/stb-src | |
| - name: Edit changelog | |
| working-directory: wivrn | |
| run: > | |
| tools/gen_debian_changelog.py | |
| --out debian/changelog | |
| ${{ (startsWith(github.ref, 'refs/tags/') && '' ) || '--nightly' }} | |
| --author "github-actions <41898282+github-actions@users.noreply.github.com>" | |
| --distribution "${{ matrix.distro }}"; | |
| cat debian/changelog | |
| - name: Build package | |
| working-directory: wivrn | |
| run: dpkg-buildpackage --build=binary --no-sign | |
| - name: Publish package | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: wivrn-${{ matrix.distro }} | |
| path: | | |
| *.deb | |
| *.ddeb | |
| - name: Check package | |
| working-directory: wivrn | |
| run: lintian --fail-on error | sed -e s/^W:/::warning::/ -e s/^E:/::error::/ | |
| release: | |
| name: Create release | |
| runs-on: ubuntu-22.04 | |
| needs: [build-linux, build-android, build-server-flatpak, build-ubuntu] | |
| if: success() && startsWith(github.ref, 'refs/tags/') | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| path: wivrn | |
| - name: Check for FLATHUB_TOKEN | |
| id: flathub-token-check | |
| shell: bash | |
| run: | | |
| if [[ "${{ secrets.FLATHUB_TOKEN}}" != '' ]]; then | |
| echo "available=true" >> $GITHUB_OUTPUT; | |
| else | |
| echo "available=false" >> $GITHUB_OUTPUT; | |
| fi | |
| - uses: actions/checkout@v4 | |
| if: ${{ steps.flathub-token-check.outputs.available == 'true' }} | |
| with: | |
| fetch-depth: 0 | |
| repository: ${{ github.repository_owner }}/io.github.wivrn.wivrn | |
| path: flathub | |
| token: ${{ secrets.FLATHUB_TOKEN }} | |
| - name: Download artifacts (APK) | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: apk | |
| pattern: '*-Release' | |
| merge-multiple: true | |
| - name: Download artifacts (flatpak) | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: wivrn-flatpak-x86_64 | |
| path: flatpak | |
| - name: Release | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| tag_name: ${{ inputs.ref }} | |
| generate_release_notes: true | |
| draft: true | |
| files: | | |
| apk/*.apk | |
| flatpak/*.flatpak | |
| - name: Update flatpak manifest for flathub | |
| if: ${{ steps.flathub-token-check.outputs.available == 'true' }} | |
| run: | | |
| WIVRN_TAG=$(echo $GITHUB_REF | sed -E -e "s,refs/[^/]*/v?,,") | |
| git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" | |
| git config --global user.name "github-actions[bot]" | |
| sudo apt-get install python3-toml python3-aiohttp | |
| cd flathub | |
| git remote add upstream https://github.com/flathub/io.github.wivrn.wivrn.git | |
| git fetch upstream | |
| git reset --hard upstream/master | |
| git config --global --add safe.directory $(pwd) | |
| ../wivrn/tools/gen_flatpak_manifest.py --git https://github.com/${{github.repository}}.git | |
| cp ../wivrn/flatpak/*.config . | |
| git checkout -b $WIVRN_TAG | |
| git add io.github.wivrn.wivrn.yml xrizer-gen-src.json *.config | |
| git commit -m "Version "$WIVRN_TAG | |
| git push --set-upstream origin $WIVRN_TAG | |
| git show | |
| - name: Update release branch | |
| run: | | |
| cd wivrn | |
| if git fetch origin release; then | |
| git push origin HEAD:release | |
| fi | |
| sync_fork_downstream: | |
| name: Sync fork downstream | |
| runs-on: ubuntu-24.04 | |
| needs: [build-linux, build-android] | |
| if: ${{ vars.APK_ONLY == '' && github.ref == 'refs/heads/master' }} | |
| steps: | |
| - name: Check for DOWNSTREAM_GITHUB_TOKEN | |
| id: downstream-secret-check | |
| shell: bash | |
| run: | | |
| if [[ "${{ secrets.DOWNSTREAM_GITHUB_TOKEN }}" != '' ]]; then | |
| echo "available=true" >> $GITHUB_OUTPUT; | |
| else | |
| echo "available=false" >> $GITHUB_OUTPUT; | |
| fi | |
| - name: Sync fork downstream | |
| if: ${{ steps.downstream-secret-check.outputs.available == 'true' }} | |
| run: | | |
| curl -X POST -H "Accept: application/vnd.github.v3+json" \ | |
| -H "Authorization: token ${{ secrets.DOWNSTREAM_GITHUB_TOKEN }}" \ | |
| https://api.github.com/repos/WiVRn/WiVRn-APK/merge-upstream \ | |
| -d '{"branch":"master"}' |