Skip to content

node: store callbacks in map #12293

node: store callbacks in map

node: store callbacks in map #12293

Workflow file for this run

# Copyright © SixtyFPS GmbH <[email protected]>
# SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial
name: CI
on:
push:
branches: [master, "feature/*"]
pull_request:
branches: [master, "feature/*"]
workflow_dispatch:
jobs:
build_and_test:
env:
DYLD_FRAMEWORK_PATH: /Users/runner/work/slint/Qt/5.15.2/clang_64/lib
QT_QPA_PLATFORM: offscreen
RUSTFLAGS: -D warnings
CARGO_PROFILE_DEV_DEBUG: 0
CARGO_INCREMENTAL: false
RUST_BACKTRACE: 1
strategy:
matrix:
os: [ubuntu-22.04, macos-11, windows-2022]
rust_version: [stable, "1.70"]
include:
- os: windows-2022
extra_args: "--exclude ffmpeg"
- os: macos-11
extra_args: "--exclude ffmpeg"
exclude:
- os: macos-11
rust_version: "1.70"
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/install-linux-dependencies
- name: Install Qt
if: runner.os != 'Windows'
uses: jurplel/install-qt-action@v3
with:
version: '5.15.2'
setup-python: false
cache: true
- name: Install ffmpeg and alsa (Linux)
if: runner.os == 'Linux'
run: sudo apt-get install clang libavcodec-dev libavformat-dev libavutil-dev libavfilter-dev libavdevice-dev libasound2-dev pkg-config
- name: Setup headless display
uses: pyvista/setup-headless-display-action@v1
- name: Set default style
if: matrix.os != 'windows-2022'
run: |
echo "SLINT_STYLE=native" >> $GITHUB_ENV
- name: Set default style
if: matrix.os == 'windows-2022'
run: |
echo "SLINT_STYLE=fluent" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
echo "SLINT_NO_QT=1" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
- uses: ./.github/actions/setup-rust
with:
toolchain: ${{ matrix.rust_version }}
key: x-v2
# - name: Pin dependencies to make it build with our MSRV
# if: matrix.rust_version == '1.66'
# shell: bash
# run: |
# if [ ! -f ./Cargo.lock ]; then
# cargo update -p half --precise 2.2.1
# cargo update -p codemap-diagnostic --precise 0.1.1
# cargo update -p clap --precise 4.3.24
# cargo update -p clap_builder --precise 4.3.24
# cargo update -p clap_lex --precise 0.5.0
# fi
- name: Run tests
run: DYLD_FRAMEWORK_PATH=$Qt5_DIR/lib cargo test --verbose --all-features --workspace ${{ matrix.extra_args }} --exclude slint-node --exclude test-driver-node --exclude slint-node --exclude test-driver-nodejs --exclude test-driver-cpp --exclude mcu-board-support --exclude printerdemo_mcu --exclude uefi-demo --exclude slint-cpp
env:
SLINT_CREATE_SCREENSHOTS: 1
shell: bash
- name: Archive screenshots after failed tests
if: ${{ failure() }}
uses: actions/upload-artifact@v3
with:
name: screenshots-${{matrix.os}}
path: |
tests/screenshots/references
node_test:
env:
DYLD_FRAMEWORK_PATH: /Users/runner/work/slint/Qt/5.15.2/clang_64/lib
QT_QPA_PLATFORM: offscreen
RUSTFLAGS: -D warnings
CARGO_PROFILE_DEV_DEBUG: 0
CARGO_INCREMENTAL: false
RUST_BACKTRACE: 1
strategy:
matrix:
os: [ubuntu-22.04, macos-11, windows-2022]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/install-linux-dependencies
- name: Install Qt
if: runner.os != 'Windows'
uses: jurplel/install-qt-action@v3
with:
version: '5.15.2'
setup-python: false
cache: true
- name: Setup headless display
uses: pyvista/setup-headless-display-action@v1
- name: Set default style
if: matrix.os != 'windows-2022'
run: |
echo "SLINT_STYLE=native" >> $GITHUB_ENV
- name: Set default style
if: matrix.os == 'windows-2022'
run: |
echo "SLINT_STYLE=fluent" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
echo "SLINT_NO_QT=1" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
- uses: ./.github/actions/install-nodejs
id: node-install
- uses: ./.github/actions/setup-rust
with:
key: x-napi-v2-${{ steps.node-install.outputs.node-version }} # the cache key consists of a manually bumpable version and the node version, as the cached rustc artifacts contain linking information where to find node.lib, which is in a versioned directory.
- name: Run npm install
working-directory: ./api/node
run: npm install
- name: Typescript check
working-directory: ./api/node
run: npm run syntax_check
- name: Build node plugin in debug
run: npm run build:debug
working-directory: ./api/node
- name: Run node tests
working-directory: ./api/node
run: npm test
- name: Run test-driver-nodejs
run: cargo test --verbose --all-features -p test-driver-nodejs -p slint-node
cpp_test_driver:
env:
DYLD_FRAMEWORK_PATH: /Users/runner/work/slint/Qt/5.15.2/clang_64/lib
QT_QPA_PLATFORM: offscreen
RUSTFLAGS: -D warnings
CARGO_INCREMENTAL: false
RUST_BACKTRACE: 1
CARGO_PROFILE_DEV_DEBUG: 0
strategy:
matrix:
os: [ubuntu-22.04, macos-12, windows-2022]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/install-linux-dependencies
with:
force-gcc-10: true
- name: Install Qt
if: runner.os != 'Windows'
uses: jurplel/install-qt-action@v3
with:
version: '5.15.2'
cache: true
- name: Set default style
if: runner.os != 'Windows'
run: echo "SLINT_STYLE=native" >> $GITHUB_ENV
- name: Set default style
if: runner.os == 'Windows'
run: |
echo "SLINT_STYLE=fluent" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
echo "SLINT_NO_QT=1" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
- uses: ./.github/actions/setup-rust
- name: Build
run: cargo build --lib -p slint-cpp --features testing,backend-qt
- name: Run tests
run: cargo test --verbose -p test-driver-cpp --features slint-cpp/backend-qt
cpp_cmake:
env:
DYLD_FRAMEWORK_PATH: /Users/runner/work/slint/Qt/6.5.1/clang_64/lib
QT_QPA_PLATFORM: offscreen
CARGO_INCREMENTAL: false
RUST_BACKTRACE: 1
CARGO_PROFILE_DEV_DEBUG: 0
strategy:
matrix:
os: [ubuntu-22.04, macos-12, windows-2022]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/install-linux-dependencies
with:
force-gcc-10: true
- name: Install Qt (Ubuntu)
uses: jurplel/install-qt-action@v3
if: matrix.os == 'ubuntu-22.04'
with:
version: 5.15.2
cache: true
- name: Install Qt (cached)
if: matrix.os != 'ubuntu-22.04'
uses: jurplel/install-qt-action@v3
with:
version: 6.5.1
cache: true
- uses: ./.github/actions/setup-rust
- uses: ilammy/msvc-dev-cmd@v1
- name: Select MSVC (windows)
if: matrix.os == 'windows-2022'
run: |
echo "CC=cl.exe" >> $GITHUB_ENV
echo "CXX=cl.exe" >> $GITHUB_ENV
- name: Enable test coverage for resource embedding in C++ when building examples
if: matrix.os == 'ubuntu-22.04'
run: |
echo "SLINT_EMBED_RESOURCES=true" >> $GITHUB_ENV
- name: C++ Build
uses: lukka/[email protected]
with:
cmakeListsOrSettingsJson: CMakeListsTxtAdvanced
cmakeListsTxtPath: CMakeLists.txt
cmakeAppendedArgs: '-DSLINT_BUILD_TESTING=ON -DSLINT_BUILD_EXAMPLES=ON -DCMAKE_BUILD_TYPE=Debug -DSLINT_FEATURE_RENDERER_SKIA=ON'
buildDirectory: ${{ runner.workspace }}/cppbuild
buildWithCMakeArgs: '--config Debug'
- name: ctest
working-directory: ${{ runner.workspace }}/cppbuild
run: ctest --verbose -C Debug
- name: cpack
working-directory: ${{ runner.workspace }}/cppbuild
run: cmake --build . --config Debug --target package
- name: "Create C++ packages artifact"
uses: actions/upload-artifact@v3
with:
name: cpp_bin-${{ matrix.os }}
path: ${{ runner.workspace }}/cppbuild/Slint-cpp-*
cpp_package_test:
needs: [cpp_cmake]
runs-on: ubuntu-22.04
env:
DYLD_FRAMEWORK_PATH: /Users/runner/work/slint/Qt/6.5.1/clang_64/lib
QT_QPA_PLATFORM: offscreen
CARGO_INCREMENTAL: false
CARGO_PROFILE_DEV_DEBUG: 0
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/install-linux-dependencies
with:
force-gcc-10: true
- name: Install Qt (Ubuntu)
uses: jurplel/install-qt-action@v3
with:
version: 5.15.2
cache: true
- uses: actions/download-artifact@v2
with:
name: cpp_bin-ubuntu-22.04
path: cpp-package
- name: unpack package
run: |
mkdir package
tar xvf cpp-package/Slint-cpp-*.tar.gz -C package --strip-components=1
echo "CMAKE_PREFIX_PATH=`pwd`/package" >> $GITHUB_ENV
# Build the examples with a config different than the package (which is debug)
- name: Build examples
uses: lukka/[email protected]
with:
cmakeListsOrSettingsJson: CMakeListsTxtAdvanced
cmakeListsTxtPath: examples/CMakeLists.txt
cmakeAppendedArgs: '-DCMAKE_BUILD_TYPE=Release -DSLINT_FEATURE_INTERPRETER=1 -DSLINT_FEATURE_BACKEND_QT=1'
buildDirectory: ${{ runner.workspace }}/examples/build
buildWithCMakeArgs: '--config Release'
# test to compile the mcu backend for the arm target (no_std)
mcu:
env:
SLINT_FONT_SIZES: 8,11,10,12,13,14,15,16,18,20,22,24,32
RUSTFLAGS: --cfg slint_int_coord
CARGO_PROFILE_DEV_DEBUG: 0
CARGO_PROFILE_RELEASE_OPT_LEVEL: s
runs-on: ubuntu-22.04
strategy:
matrix:
include:
- feature: pico-st7789
target: thumbv6m-none-eabi
- feature: stm32h735g
target: thumbv7em-none-eabihf
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/setup-rust
with:
target: ${{matrix.target}}
- name: Check
run: cargo check --target=${{matrix.target}} -p printerdemo_mcu --no-default-features --features=mcu-board-support/${{matrix.feature}} --release
mcu_esp:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
- uses: dtolnay/rust-toolchain@stable
- uses: esp-rs/[email protected]
with:
default: true
buildtargets: esp32
ldproxy: false
- uses: Swatinem/rust-cache@v2
- name: Kaluga
run: cargo +esp check -p printerdemo_mcu --target xtensa-esp32s2-none-elf --no-default-features --features=mcu-board-support/esp32-s2-kaluga-1 --config examples/mcu-board-support/esp32_s2_kaluga_1/cargo-config.toml --release
- name: S3Box
run: cargo +esp check -p printerdemo_mcu --target xtensa-esp32s3-none-elf --no-default-features --features=mcu-board-support/esp32-s3-box --config examples/mcu-board-support/esp32_s3_box/cargo-config.toml --release
ffi_32bit_build:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/setup-rust
with:
target: armv7-unknown-linux-gnueabihf
- uses: baptiste0928/cargo-install@v2
with:
crate: cross
- name: Check
run: cross check --target=armv7-unknown-linux-gnueabihf -p slint-cpp --no-default-features --features=testing,interpreter,std
uefi-demo:
env:
CARGO_PROFILE_DEV_DEBUG: 0
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/setup-rust
with:
toolchain: stable
target: x86_64-unknown-uefi
- name: Check
run: cargo check --target=x86_64-unknown-uefi -p uefi-demo
docs:
uses: ./.github/workflows/build_docs.yaml
wasm:
uses: ./.github/workflows/wasm_editor_and_interpreter.yaml
wasm_demo:
uses: ./.github/workflows/wasm_demos.yaml
tree-sitter:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- uses: robinraju/[email protected]
with:
repository: "tree-sitter/tree-sitter"
latest: true
fileName: "tree-sitter-linux-x64.gz"
out-file-path: ${{ runner.workspace }}
- name: Extract tree-sitter-cli
run: |
gunzip tree-sitter-linux-x64.gz
chmod 755 tree-sitter-linux-x64
mv tree-sitter-linux-x64 tree-sitter
working-directory: ${{ runner.workspace }}
- name: Generate tree-sitter corpus
run: find ../../tests/cases -type d -exec ./test-to-corpus.py --tests-directory {} \;
working-directory: editors/tree-sitter-slint
- name: Generate tree-sitter parser
run: ${{ runner.workspace }}/tree-sitter generate
working-directory: editors/tree-sitter-slint
- name: Run tree-sitter tests
run: ${{ runner.workspace }}/tree-sitter test -u
working-directory: editors/tree-sitter-slint
- name: Check for parse ERRORs from tree-sitter
run: sh -c "! grep -q ERROR corpus/*.txt"
working-directory: editors/tree-sitter-slint
# Checkout a old version of the tests and example, then run the slint-updater on them
# and check that it worked with the interpreter test.
updater_test:
env:
SLINT_NO_QT: 1
CARGO_INCREMENTAL: false
RUST_BACKTRACE: 1
CARGO_PROFILE_DEV_DEBUG: 0
strategy:
matrix:
from_version: ['0.3.0']
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- uses: ./.github/actions/install-linux-dependencies
- uses: ./.github/actions/setup-rust
- name: Checkout old version
run: |
git checkout v${{ matrix.from_version }} --no-overlay -- examples
git checkout v${{ matrix.from_version }} --no-overlay -- tests/cases
git checkout v${{ matrix.from_version }} --no-overlay -- tests/helper_components
# Remove examples from the workspace because they may no longer exist or their Cargo.toml might prevent the build of the updater
sed -i "/examples/d" Cargo.toml
- name: "Commit old checkout"
run: |
git config --global user.email "${GITHUB_ACTOR}@users.noreply.github.com"
git config --global user.name "${GITHUB_ACTOR}"
git commit -a -m "REVERT TESTS TO v${{ matrix.from_version }}"
- name: run the updater
run: |
cargo run -p slint-updater -- -i examples/*/*.slint
cargo run -p slint-updater -- -i examples/*/*/*.slint
cargo run -p slint-updater -- -i tests/cases/*.slint
cargo run -p slint-updater -- -i tests/cases/*/*.slint
- name: Show the diff
run: git diff
- name: test
# Skip a few tests that rely on private renamed properties.
# Skip the tests which makes two way binding to output property (these are warning in previous version)
# Skip the test that use impure functions in property bindings (this is also warning in previous version)
# Skip the example that did not exist or that are broken
# Skip the path layout related tests as the element has been removed
# Skip the booker as it use api from the LineEdit that wasn"t meant to be used
run: |
cargo test -p test-driver-interpreter -- \
--skip test_interpreter_text_cursor_move \
--skip test_interpreter_text_cursor_move_grapheme \
--skip test_interpreter_text_cut \
--skip test_interpreter_text_select_all \
--skip test_interpreter_text_surrogate_cursor \
--skip test_interpreter_text_text_change \
--skip test_interpreter_crashes_layout_deleted_item \
--skip test_interpreter_focus_focus_change_subcompo \
--skip test_interpreter_focus_focus_change_through_signal \
--skip test_interpreter_globals_alias_to_global \
--skip test_interpreter_text_default_color \
--skip test_interpreter_crashes_issue1271_set_in_if \
--skip test_interpreter_models_assign_equal_model \
--skip example_carousel \
--skip example_fancy_demo \
--skip example_printerdemo_old \
--skip test_interpreter_elements_path_fit \
--skip test_interpreter_layout_path \
--skip test_interpreter_7guis_booker \
# Test that the formater don't introduce slint compilation error
fmt_test:
env:
SLINT_NO_QT: 1
CARGO_INCREMENTAL: false
RUST_BACKTRACE: 1
CARGO_PROFILE_DEV_DEBUG: 0
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/install-linux-dependencies
- uses: ./.github/actions/setup-rust
- name: run the formatter
run: |
cargo run -p slint-fmt -- -i tests/cases/*/*.slint
cargo run -p slint-fmt -- -i examples/*/*.slint
cargo run -p slint-fmt -- -i examples/*/*/*.slint
- name: Show the diff
run: git diff
- name: Run the intepreter test to make sure that the test are passing after format
run: cargo test -p test-driver-interpreter
esp-idf:
runs-on: ubuntu-22.04
container: espressif/idf:release-v5.1
steps:
- uses: actions/checkout@v3
- uses: dtolnay/rust-toolchain@stable
- uses: esp-rs/[email protected]
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