Skip to content

Move application configuration in settings #4130

Move application configuration in settings

Move application configuration in settings #4130

Workflow file for this run

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