# Copyright © SixtyFPS GmbH <info@slint.dev>
# SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial

# Build various demo binaries, c++ packages and documentation and publish them on the website
name: Nightly snapshot

on:
    workflow_dispatch:
        inputs:
            private:
                type: boolean
                default: true
                required: false
                description: "Private build? True means artifacts are only built. False means the artefacts are published (docs, vscode extension) to the web/marketplace"
            release:
                type: boolean
                default: false
                required: false
                description: "Release? Enable options for building binaries for a release (i.e. don't have a -nightly suffix for the extension)"

    schedule:
        - cron: "0 4 * * *"

env:
    # Keep in sync with features in slint_tool_binary.yaml, cpp_package.yaml, and api/node/Cargo.toml
    SLINT_BINARY_FEATURES: "backend-linuxkms-noseat,backend-winit,renderer-femtovg,renderer-skia,renderer-software"
    MACOSX_DEPLOYMENT_TARGET: "11.0"

jobs:
    slint-viewer-binary:
        uses: ./.github/workflows/slint_tool_binary.yaml
        with:
            program: "viewer"
        secrets:
            certificate: ${{ secrets.APPLE_CERTIFICATE_P12 }}
            certificate_password: ${{ secrets.APPLE_CERTIFICATE_P12_PASSWORD }}
            keychain_password: ${{ secrets.APPLE_KEYCHAIN_PASSWORD }}
            developer_id: ${{ secrets.APPLE_DEV_ID }}
    slint-lsp-binary:
        uses: ./.github/workflows/slint_tool_binary.yaml
        with:
            program: "lsp"
        secrets:
            certificate: ${{ secrets.APPLE_CERTIFICATE_P12 }}
            certificate_password: ${{ secrets.APPLE_CERTIFICATE_P12_PASSWORD }}
            keychain_password: ${{ secrets.APPLE_KEYCHAIN_PASSWORD }}
            developer_id: ${{ secrets.APPLE_DEV_ID }}
    docs:
        uses: ./.github/workflows/build_docs.yaml
    wasm_demo:
        uses: ./.github/workflows/wasm_demos.yaml
        with:
            rustflags: "--cfg=web_sys_unstable_apis"
    wasm:
        uses: ./.github/workflows/wasm_editor_and_interpreter.yaml
        with:
            rustflags: "--cfg=web_sys_unstable_apis"
    cpp_package:
        uses: ./.github/workflows/cpp_package.yaml

    check-for-secrets:
        runs-on: ubuntu-latest
        outputs:
            has-vscode-marketplace-pat: ${{ steps.one.outputs.has-vscode-marketplace-pat }}
            has-openvsx-pat: ${{ steps.one.outputs.has-openvsx-pat }}
            has-www-publish-secret: ${{ steps.one.outputs.has-www-publish-secret }}
        steps:
            - id: one
              run: |
                  [ -n "${{ secrets.VSCODE_MARKETPLACE_PAT }}" ] && echo "has-vscode-marketplace-pat=yes" >> "$GITHUB_OUTPUT"
                  [ -n "${{ secrets.OPENVSX_PAT }}" ] && echo "has-openvsx-pat=yes" >> "$GITHUB_OUTPUT"
                  [ -n "${{ secrets.WWW_PUBLISH_SSH_KEY }}" ] && echo "has-www-publish-secret=yes" >> "$GITHUB_OUTPUT"
                  cat "$GITHUB_OUTPUT"

    build_vscode_lsp_linux_windows:
        env:
            SLINT_NO_QT: 1
        strategy:
            matrix:
                include:
                    - os: ubuntu-20.04
                      toolchain: x86_64-unknown-linux-gnu
                      binary_built: slint-lsp
                      artifact_name: slint-lsp-x86_64-unknown-linux-gnu
                    - os: windows-2022
                      toolchain: x86_64-pc-windows-msvc
                      binary_built: slint-lsp.exe
                      artifact_name: slint-lsp-x86_64-pc-windows-msvc.exe
        runs-on: ${{ matrix.os }}
        steps:
            - uses: actions/checkout@v4
            - uses: ./.github/actions/setup-rust
              with:
                  target: ${{ matrix.toolchain }}
            - uses: ./.github/actions/install-linux-dependencies
              with:
                  old-ubuntu: true
            - name: Build LSP
              run: cargo build --target ${{ matrix.toolchain }} --features ${{ env.SLINT_BINARY_FEATURES }} --release -p slint-lsp
            - name: Create artifact directory
              run: |
                  mkdir bin
                  cp target/${{ matrix.toolchain }}/release/${{ matrix.binary_built }} bin/${{ matrix.artifact_name }}
            - name: "Upload LSP Artifact"
              uses: actions/upload-artifact@v4
              with:
                  name: vscode-lsp-binary-${{ matrix.toolchain }}
                  path: |
                      bin

    build_vscode_lsp_macos_x86_64:
        env:
            SLINT_NO_QT: 1
        runs-on: macos-latest
        steps:
            - uses: actions/checkout@v4
            - uses: ./.github/actions/setup-rust
              with:
                  target: x86_64-apple-darwin
            - name: Install cargo-bundle
              run: cargo install cargo-bundle
            - name: Build Main LSP Bundle
              working-directory: tools/lsp
              run: cargo bundle --release --features ${{ env.SLINT_BINARY_FEATURES }}
            - name: Create artifact directory
              run: |
                  mkdir bin
                  cp -a target/release/bundle/osx/Slint\ Live\ Preview.app bin
            - name: "Upload LSP Artifact"
              uses: actions/upload-artifact@v4
              with:
                  name: vscode-lsp-binary-x86_64-apple-darwin
                  path: |
                      bin

    build_vscode_lsp_macos_aarch64:
        env:
            SLINT_NO_QT: 1
        runs-on: macos-latest
        steps:
            - uses: actions/checkout@v4
            - uses: ./.github/actions/setup-rust
              with:
                  target: aarch64-apple-darwin
            - name: Build AArch64 LSP
              run: cargo build --target aarch64-apple-darwin --features ${{ env.SLINT_BINARY_FEATURES }} --release -p slint-lsp
            - name: Create artifact directory
              run: |
                  mkdir bin
                  cp -a target/aarch64-apple-darwin/release/slint-lsp bin/slint-lsp-aarch64-apple-darwin
            - name: "Upload LSP Artifact"
              uses: actions/upload-artifact@v4
              with:
                  name: vscode-lsp-binary-aarch64-apple-darwin
                  path: |
                      bin

    build_vscode_lsp_macos_bundle:
        needs: [build_vscode_lsp_macos_x86_64, build_vscode_lsp_macos_aarch64]
        runs-on: macos-11
        steps:
            - uses: actions/checkout@v4
              with:
                  path: "src"
            - uses: actions/download-artifact@v4
              with:
                  name: vscode-lsp-binary-x86_64-apple-darwin
            - uses: actions/download-artifact@v4
              with:
                  name: vscode-lsp-binary-aarch64-apple-darwin
                  path: bin
            - name: Add macOS AArch64 binary to bundle
              run: |
                  lipo -create -output tmp Slint\ Live\ Preview.app/Contents/MacOS/slint-lsp bin/slint-lsp-aarch64-apple-darwin
                  mv tmp Slint\ Live\ Preview.app/Contents/MacOS/slint-lsp
                  rm -rf bin
            - uses: ./src/.github/actions/codesign
              with:
                  binary: "Slint Live Preview.app"
                  certificate: ${{ secrets.APPLE_CERTIFICATE_P12 }}
                  certificate_password: ${{ secrets.APPLE_CERTIFICATE_P12_PASSWORD }}
                  keychain_password: ${{ secrets.APPLE_KEYCHAIN_PASSWORD }}
                  developer_id: ${{ secrets.APPLE_DEV_ID }}
            - name: "Remove temporary source checkout"
              run: rm -rf src
            - name: "Upload LSP macOS bundle Artifact"
              uses: actions/upload-artifact@v4
              with:
                  name: vscode-lsp-binary-darwin
                  path: .

    build_vscode_cross_linux_lsp:
        env:
            SLINT_NO_QT: 1
        strategy:
            matrix:
                target:
                    - armv7-unknown-linux-gnueabihf
                    - aarch64-unknown-linux-gnu
        runs-on: ubuntu-20.04
        steps:
            - uses: actions/checkout@v4
            - uses: ./.github/actions/setup-rust
              with:
                  target: ${{ matrix.target }}
            - uses: baptiste0928/cargo-install@v3
              with:
                  crate: cross
            - name: Build LSP
              run: cross build --target ${{ matrix.target }} --features ${{ env.SLINT_BINARY_FEATURES }} --release -p slint-lsp
            - name: Create artifact directory
              run: |
                  mkdir bin
                  cp target/${{ matrix.target }}/release/slint-lsp bin/slint-lsp-${{ matrix.target }}
            - name: "Upload LSP Artifact"
              uses: actions/upload-artifact@v4
              with:
                  name: vscode-lsp-binary-${{ matrix.target }}
                  path: |
                      bin

    build_vscode_extension:
        needs:
            [
                build_vscode_lsp_linux_windows,
                build_vscode_lsp_macos_bundle,
                build_vscode_cross_linux_lsp,
                check-for-secrets,
            ]
        runs-on: macos-11
        if: ${{ needs.check-for-secrets.outputs.has-openvsx-pat == 'yes' && needs.check-for-secrets.outputs.has-vscode-marketplace-pat == 'yes' }}
        steps:
            - uses: actions/checkout@v4
            - uses: actions/download-artifact@v4
              with:
                  name: vscode-lsp-binary-x86_64-unknown-linux-gnu
                  path: editors/vscode/bin
            - uses: actions/download-artifact@v4
              with:
                  name: vscode-lsp-binary-x86_64-pc-windows-msvc
                  path: editors/vscode/bin
            - uses: actions/download-artifact@v4
              with:
                  name: vscode-lsp-binary-darwin
                  path: editors/vscode/bin
            - uses: actions/download-artifact@v4
              with:
                  name: vscode-lsp-binary-armv7-unknown-linux-gnueabihf
                  path: editors/vscode/bin
            - uses: actions/download-artifact@v4
              with:
                  name: vscode-lsp-binary-aarch64-unknown-linux-gnu
                  path: editors/vscode/bin
            - name: Fix permissions
              run: chmod 755 editors/vscode/bin/* editors/vscode/bin/*.app/Contents/MacOS/*
            - uses: ./.github/actions/install-nodejs
            - name: "Prepare meta-data files for nightly package"
              env:
                  RELEASE_INPUT: ${{ github.event.inputs.release }}
              working-directory: editors/vscode
              run: |
                  if [ "$RELEASE_INPUT" != "true" ]; then
                    ../../scripts/prepare_vscode_nightly.sh
                  fi
            - name: "npm install"
              working-directory: editors/vscode
              run: npm install
            - name: Install wasm-pack
              run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
            - name: Build package and optionally publish to Visual Studio Marketplace
              id: publishToVSCM
              uses: HaaLeo/publish-vscode-extension@v1
              with:
                  pat: ${{ secrets.VSCODE_MARKETPLACE_PAT }}
                  registryUrl: https://marketplace.visualstudio.com
                  dryRun: ${{ github.event.inputs.private == 'true' || (github.ref != 'refs/heads/master' && github.event.inputs.release != 'true') }}
                  packagePath: editors/vscode
            - name: Publish to Open VSX Registry
              continue-on-error: true
              if: ${{ github.event.inputs.private != 'true' && (github.ref == 'refs/heads/master' || github.event.inputs.release == 'true') }}
              uses: HaaLeo/publish-vscode-extension@v1
              with:
                  pat: ${{ secrets.OPENVSX_PAT }}
                  extensionFile: ${{ steps.publishToVSCM.outputs.vsixPath }}
                  packagePath: ""
            - name: "Upload extension artifact"
              uses: actions/upload-artifact@v4
              with:
                  name: slint-vscode.zip
                  path: |
                      ${{ steps.publishToVSCM.outputs.vsixPath }}

    #  publish_tree_sitter:
    #    if: github.event.inputs.private != 'true'
    #    runs-on: ubuntu-20.04
    #    steps:
    #      - uses: actions/checkout@v4
    #      - name: Upload artifact
    #        uses: actions/upload-artifact@v4
    #        with:
    #            name: tree-sitter-slint
    #            path: editors/tree-sitter-slint

    publish_artifacts:
        if: ${{ github.event.inputs.private != 'true' && needs.check-for-secrets.outputs.has-www-publish-secret == 'yes' }}
        needs: [docs, wasm_demo, wasm, check-for-secrets]
        runs-on: ubuntu-20.04
        steps:
            - uses: actions/download-artifact@v4
              with:
                  name: docs
            - uses: actions/download-artifact@v4
              with:
                  name: slintpad
                  path: slintpad
            - uses: actions/download-artifact@v4
              with:
                  name: wasm
            - uses: actions/download-artifact@v4
              with:
                  name: wasm_demo
            - name: Extract Version
              id: version
              run: |
                  version=$(grep -oP '(?<=<title>Slint )[0-9]+\.[0-9]+\.[0-9]+' target/slintdocs/html/index.html)
                  if [[ -z "$version" ]]; then
                    echo "Version not found"
                    exit 1
                  fi
                  echo "VERSION=$version" >> $GITHUB_OUTPUT
            - name: Publish Docs and Demos
              run: |
                  git config --global user.email "${GITHUB_ACTOR}@users.noreply.github.com"
                  git config --global user.name "${GITHUB_ACTOR}"
                  ssh-agent sh -c 'echo "${{ secrets.WWW_PUBLISH_SSH_KEY }}" | ssh-add - && git clone git@github.com:slint-ui/www.git  --depth 1'
                  cd www

                  if [[ "${{ github.event.inputs.release }}" == "true" ]]; then
                    output_path="releases/${{ steps.version.outputs.VERSION }}"
                  else
                    output_path="snapshots/${GITHUB_REF##*/}"
                  fi

                  rm -rf $output_path/demos
                  mkdir -p $output_path/demos

                  for demo_subdir in gallery, printerdemo,rust printerdemo_old,rust todo,rust slide_puzzle, memory, imagefilter,rust plotter, opengl_underlay, carousel,rust energy-monitor,; do
                      IFS=',' read demo subdir <<< "${demo_subdir}"

                      mkdir -p $output_path/demos/$demo
                      cp -a ../$demo/$subdir/{pkg,index.html} $output_path/demos/$demo/
                  done

                  rm -rf $output_path/wasm-interpreter
                  mkdir -p $output_path/wasm-interpreter
                  cp -a ../api/wasm-interpreter/pkg/* ./$output_path/wasm-interpreter/

                  rm -rf $output_path/editor
                  mkdir -p $output_path/editor
                  cp -a ../slintpad/* $output_path/editor/

                  rm -rf $output_path/docs
                  mkdir -p $output_path/docs
                  cp -a ../docs/site/* $output_path/docs
                  mkdir -p $output_path/docs/cpp
                  cp -a ../target/cppdocs/html/* $output_path/docs/cpp/
                  mkdir -p $output_path/docs/rust
                  cp -a ../target/doc/* $output_path/docs/rust/

                  # Fix up link to Slint language documentation
                  sed -i "s!https://slint.dev/releases/.*/docs/!../../!" $output_path/docs/rust/slint/*.html

                  for lang in rust cpp node; do
                      mkdir -p $output_path/docs/tutorial/$lang
                      cp -a ../docs/tutorial/$lang/book/html/* $output_path/docs/tutorial/$lang
                  done
                  mkdir -p $output_path/docs/node
                  cp -a ../api/node/docs/* $output_path/docs/node/
                  mkdir -p $output_path/docs/slint
                  cp -a ../target/slintdocs/html/* $output_path/docs/slint/

            - name: Adjust redirections
              if: github.event.inputs.release == 'true'
              run: |
                  sed -i "/1.0.2/! s,releases/[0-9][^/]*/\(.*\),releases/${{ steps.version.outputs.VERSION }}/\1," www/data/_redirects

            - name: Adjust slintpad default tag
              if: github.event.inputs.release == 'true'
              run: sed -i "s,XXXX_DEFAULT_TAG_XXXX,v${{ steps.version.outputs.VERSION }}," www/releases/${{ steps.version.outputs.VERSION }}/editor/assets/*.js

            - name: Update versions.txt
              if: github.event.inputs.release == 'true'
              run: ls -1 | grep -v versions.txt | sort --version-sort -r > versions.txt
              working-directory: www/releases

            - name: commit and push
              run: |
                  cd www
                  git add .
                  git add -u .
                  git commit --message "Update $NAME from $GITHUB_REPOSITORY" --message "Pull web demos and C++/Rust reference docs from commit $GITHUB_SHA ($GITHUB_REF)"
                  ssh-agent sh -c 'echo "${{ secrets.WWW_PUBLISH_SSH_KEY }}" | ssh-add - && git push origin master'

    prepare_release:
        if: github.event.inputs.private != 'true'
        needs: [cpp_package, slint-viewer-binary, slint-lsp-binary]
        runs-on: ubuntu-22.04
        permissions:
            contents: write
        steps:
            - uses: actions/download-artifact@v4
              with:
                  name: cpp_bin-linux
            - uses: actions/download-artifact@v4
              with:
                  name: cpp_bin-macos
            - uses: actions/download-artifact@v4
              with:
                  name: cpp_bin-windows
            - uses: actions/download-artifact@v4
              with:
                  name: slint-viewer-linux
            - uses: actions/download-artifact@v4
              with:
                  name: slint-viewer-windows
            - uses: actions/download-artifact@v4
              with:
                  name: slint-viewer-macos
            - uses: actions/download-artifact@v4
              with:
                  name: slint-lsp-linux
            - uses: actions/download-artifact@v4
              with:
                  name: slint-lsp-windows
            - uses: actions/download-artifact@v4
              with:
                  name: slint-lsp-macos
            - name: Extract files
              run: |
                  mkdir artifacts
                  mv Slint-cpp-*-win64.exe artifacts/
                  mv Slint-cpp-*-Linux-x86_64.tar.gz artifacts/
                  mv slint-viewer-linux.tar.gz artifacts/
                  mv slint-viewer-macos.tar.gz artifacts/
                  mv slint-lsp-linux.tar.gz artifacts/
                  mv slint-lsp-macos.tar.gz artifacts/
            - name: Extract Version
              id: version
              run: |
                  version=$(echo artifacts/Slint-cpp-*-win64.exe | sed -nre 's/^.*-([0-9]+\.[0-9]+\.[0-9]+).*$/\1/p')
                  if [[ -z "$version" ]]; then
                    echo "Version not found"
                    exit 1
                  fi
                  echo "VERSION=$version" >> $GITHUB_OUTPUT
            - uses: montudor/action-zip@v1
              with:
                  args: zip -r artifacts/slint-viewer-windows.zip slint-viewer
            - uses: montudor/action-zip@v1
              with:
                  args: zip -r artifacts/slint-lsp-windows.zip slint-lsp
            - uses: ncipollo/release-action@v1
              if: github.event.inputs.release == 'true'
              with:
                  draft: true
                  artifacts: "artifacts/*"
                  body: "[ChangeLog](https://github.com/slint-ui/slint/blob/master/CHANGELOG.md)"
                  name: ${{ steps.version.outputs.VERSION }}
                  tag: v${{ steps.version.outputs.VERSION }}
                  commit: ${{ github.sha }}

    android:
        env:
            CARGO_APK_RELEASE_KEYSTORE: /home/runner/.android/release.keystore
            CARGO_APK_RELEASE_KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
        runs-on: ubuntu-latest
        steps:
            - uses: actions/checkout@v4
            - name: Install Android API level 30
              run: ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager --install "platforms;android-30"
            - name: Cache cargo-apk
              id: cargo-apk-cache
              uses: actions/cache@v4
              with:
                  path: ~/.cargo/bin/cargo-apk
                  key: cargo-apk-cache
            # Only build cargo-apk if not cached
            - uses: dtolnay/rust-toolchain@stable
              if: steps.cargo-apk-cache.outputs.cache-hit != 'true'
            - name: Install cargo-apk
              if: steps.cargo-apk-cache.outputs.cache-hit != 'true'
              run: cargo install cargo-apk

            - uses: ./.github/actions/setup-rust
              with:
                  target: aarch64-linux-android

            - name: dump keystore
              run: |
                  mkdir -p /home/runner/.android
                  echo "${{ secrets.ANDROID_KEYSTORE_BASE64 }}" | base64 --decode > $CARGO_APK_RELEASE_KEYSTORE

            - name: Build energy-monitor example
              run: cargo apk build -p energy-monitor --target aarch64-linux-android --lib --release
            - name: Build todo demo
              run: cargo apk build -p todo --target aarch64-linux-android --lib --release
            - name: "upload APK artifact"
              uses: actions/upload-artifact@v4
              with:
                  name: android-demo
                  path: |
                    target/release/apk/energy-monitor.apk
                    target/release/apk/todo_lib.apk

# Purely quality-assurance related jobs, not relevant for release artefacts
    qa-esp-idf:
        strategy:
          matrix:
            esp-idf-target:
              - release-v5.2
              - latest
        runs-on: ubuntu-22.04
        container: espressif/idf:${{ matrix.esp-idf-target }}
        steps:
            - uses: actions/checkout@v4
            - uses: dtolnay/rust-toolchain@stable
            - uses: esp-rs/xtensa-toolchain@v1.5
              with:
                  default: true
                  buildtargets: esp32
                  ldproxy: false
            - uses: Swatinem/rust-cache@v2
            - name: Build and Test Printer demo
              shell: bash
              working-directory: examples/printerdemo_mcu/esp-idf
              run: |
                  . ${IDF_PATH}/export.sh
                  idf.py build
            - name: Build and Test Carousel example s3 box
              shell: bash
              working-directory: examples/carousel/esp-idf/s3-box
              run: |
                  . ${IDF_PATH}/export.sh
                  idf.py build
            - name: Build and Test Carousel example s3 usb otg
              shell: bash
              working-directory: examples/carousel/esp-idf/s3-usb-otg
              run: |
                  . ${IDF_PATH}/export.sh
                  idf.py build
            - name: Build and Test Carousel example s2 kaluga kit
              shell: bash
              working-directory: examples/carousel/esp-idf/s2-kaluga-kit
              run: |
                  . ${IDF_PATH}/export.sh
                  idf.py build      
    
    qa-tree-sitter-latest:
        uses: ./.github/workflows/tree_sitter.yaml
        with:
          latest: true

    qa-yocto-build:
        strategy:
            matrix:
                include:
                    - sdk_url: https://nextcloud.slint.dev/s/SCXYDmEmr45pkak/download/poky-glibc-x86_64-core-image-weston-cortexa57-qemuarm64-toolchain-4.0.9.sh
                      env_setup: environment-setup-cortexa57-poky-linux
                      target: aarch64-unknown-linux-gnu
                    - sdk_url: https://nextcloud.slint.dev/s/BTL5NtLACjgS7Pf/download/poky-glibc-x86_64-core-image-weston-cortexa15t2hf-neon-qemuarm-toolchain-4.0.9.sh
                      env_setup: environment-setup-cortexa15t2hf-neon-poky-linux-gnueabi
                      target: armv7-unknown-linux-gnueabihf
        runs-on: ubuntu-22.04
        steps:
            - uses: actions/checkout@v4
            - name: Fetch Yocto SDK
              run: |
                  # Fetch pre-built SDK built via populate_sdk for core-image-weston with setup from https://github.com/slint-ui/meta-slint/blob/main/.github/workflows/ci.yml
                  wget -O sdk.sh ${{ matrix.sdk_url }}
                  chmod +x sdk.sh
                  ./sdk.sh -d ${{ runner.workspace }}/yocto-sdk -y
                  rm -f sdk.sh
            - name: Install Rust
              uses: dtolnay/rust-toolchain@stable
              with:
                  toolchain: stable
                  target: ${{ matrix.target }}
            - name: C++ Build
              run: |
                  . ${{ runner.workspace }}/yocto-sdk/${{ matrix.env_setup }}
                  # Only needed for 32-bit arm builds where soft-fp/hard-fp affects header file lookup, hence the need to drag in these flags. See also commit
                  # f5c3908b7ec5131b7b19ff642b5975660c7484f8
                  export BINDGEN_EXTRA_CLANG_ARGS=$OECORE_TUNE_CCARGS
                  mkdir ${{ runner.workspace }}/cppbuild
                  cmake -GNinja -B ${{ runner.workspace }}/cppbuild -S . -DRust_CARGO_TARGET=${{ matrix.target }} -DSLINT_BUILD_TESTING=ON -DSLINT_BUILD_EXAMPLES=ON -DCMAKE_BUILD_TYPE=Debug -DSLINT_FEATURE_RENDERER_SKIA=ON -DSLINT_FEATURE_BACKEND_QT=OFF -DSLINT_FEATURE_BACKEND_LINUXKMS=ON -DSLINT_FEATURE_INTERPRETER=ON
                  cmake --build ${{ runner.workspace }}/cppbuild          
