From ffa8a266ecdbdb952fa5c12f4aa011bb91bda731 Mon Sep 17 00:00:00 2001 From: Piotr Korkus Date: Wed, 10 Dec 2025 11:23:22 +0100 Subject: [PATCH 1/2] Add Kyron integration - add kyron after splitting from orchestration - fix examples and FITs --- .../workflows/build_and_test_on_every_pr.yml | 2 +- .../rust_test_scenarios/BUILD | 4 +- feature_showcase/rust/BUILD | 13 ++- feature_showcase/rust/kyron/main.rs | 5 +- .../rust/orchestration_persistency/main.rs | 97 +++++++++++++------ integration_test.sh | 2 +- score_modules.MODULE.bazel | 27 +++--- 7 files changed, 93 insertions(+), 57 deletions(-) diff --git a/.github/workflows/build_and_test_on_every_pr.yml b/.github/workflows/build_and_test_on_every_pr.yml index a1cfd2c019..05e861166e 100644 --- a/.github/workflows/build_and_test_on_every_pr.yml +++ b/.github/workflows/build_and_test_on_every_pr.yml @@ -53,4 +53,4 @@ jobs: done < ci/showcase_targets_run.txt - name: Feature Integration Tests run: | - bazel run --config bl-x86_64-linux //feature_integration_tests/python_test_cases:fit \ No newline at end of file + bazel test --config bl-x86_64-linux //feature_integration_tests/python_test_cases:fit diff --git a/feature_integration_tests/rust_test_scenarios/BUILD b/feature_integration_tests/rust_test_scenarios/BUILD index d6c2e0db3c..41f582aed7 100644 --- a/feature_integration_tests/rust_test_scenarios/BUILD +++ b/feature_integration_tests/rust_test_scenarios/BUILD @@ -21,8 +21,8 @@ rust_binary( "manual", ], deps = [ - "@score_orchestrator//src/kyron:libkyron", - "@score_orchestrator//src/kyron-foundation:libkyron_foundation", + "@score_kyron//src/kyron:libkyron", + "@score_kyron//src/kyron-foundation:libkyron_foundation", "@score_orchestrator//src/orchestration:liborchestration", "@score_persistency//src/rust/rust_kvs:rust_kvs", "@score_test_scenarios//test_scenarios_rust:test_scenarios_rust", diff --git a/feature_showcase/rust/BUILD b/feature_showcase/rust/BUILD index 13596103af..e1e4566ab0 100644 --- a/feature_showcase/rust/BUILD +++ b/feature_showcase/rust/BUILD @@ -17,9 +17,9 @@ rust_binary( name = "kyron_example", srcs = glob(["kyron/**/*.rs"]), deps = [ - "@score_orchestrator//src/kyron:libkyron", - "@score_orchestrator//src/kyron-foundation:libkyron_foundation", - "@score_crates//:tracing", + "@score_kyron//src/kyron:libkyron", + "@score_kyron//src/kyron-foundation:libkyron_foundation", + "@score_crates//:tracing_subscriber", ], visibility = ["//visibility:public"], ) @@ -28,11 +28,10 @@ rust_binary( name = "orch_per_example", srcs = glob(["orchestration_persistency/**/*.rs"]), deps = [ - "@score_orchestrator//src/kyron:libkyron", - "@score_orchestrator//src/kyron-foundation:libkyron_foundation", + "@score_kyron//src/kyron:libkyron", + "@score_kyron//src/kyron-foundation:libkyron_foundation", "@score_orchestrator//src/orchestration:liborchestration", - "@score_orchestrator//src/logging_tracing:liblogging_tracing", - "@score_crates//:tracing", + "@score_kyron//src/logging_tracing:liblogging_tracing", "@score_persistency//src/rust/rust_kvs:rust_kvs", ], visibility = ["//visibility:public"], diff --git a/feature_showcase/rust/kyron/main.rs b/feature_showcase/rust/kyron/main.rs index be8bfc5a09..cf644c73ae 100644 --- a/feature_showcase/rust/kyron/main.rs +++ b/feature_showcase/rust/kyron/main.rs @@ -23,7 +23,10 @@ use kyron_foundation::prelude::*; /// For more visit https://github.com/eclipse-score/orchestrator #[kyron::main] async fn main() { - tracing_subscriber::fmt().with_target(false).with_max_level(Level::INFO).init(); + tracing_subscriber::fmt() + .with_target(false) + .with_max_level(Level::INFO) + .init(); let (sender, mut receiver) = create_channel_default::(); diff --git a/feature_showcase/rust/orchestration_persistency/main.rs b/feature_showcase/rust/orchestration_persistency/main.rs index e77c2d5a8b..55a98fb23c 100644 --- a/feature_showcase/rust/orchestration_persistency/main.rs +++ b/feature_showcase/rust/orchestration_persistency/main.rs @@ -15,9 +15,11 @@ use std::time::Duration; use kyron::runtime::*; use kyron_foundation::prelude::*; -use logging_tracing::TracingLibraryBuilder; +use logging_tracing::LogAndTraceBuilder; use orchestration::{ - actions::{invoke::Invoke, sequence::SequenceBuilder, sync::SyncBuilder, trigger::TriggerBuilder}, + actions::{ + invoke::Invoke, sequence::SequenceBuilder, sync::SyncBuilder, trigger::TriggerBuilder, + }, api::{design::Design, Orchestration}, common::DesignConfig, prelude::InvokeResult, @@ -34,7 +36,6 @@ use rust_kvs::prelude::*; // which starts the object detection component. Persistency is demonstrated using a key-value store during shutdown. // The orchestration is run using the Kyron async runtime, and the program chains are executed concurrently. - const CAMERA_IMG_READY: &str = "CameraImageReadyEvent"; const CAMERA_IMG_PROCESSED: &str = "CameraImageProcessedEvent"; @@ -56,8 +57,8 @@ async fn on_shutdown() -> InvokeResult { // Instance ID for KVS object instances. let instance_id = InstanceId(0); let builder = KvsBuilder::new(instance_id) - .dir("./") - .kvs_load(KvsLoad::Optional); + .dir("./") + .kvs_load(KvsLoad::Optional); let kvs = builder.build().unwrap(); kvs.set_value("number", 123.0).unwrap(); @@ -74,19 +75,29 @@ fn camera_processing_component_design() -> Result { // Register events and invoke actions in design so it knows how to build task chains design.register_event(CAMERA_IMG_READY.into())?; design.register_event(CAMERA_IMG_PROCESSED.into())?; - let on_camera_image_ready_tag = design.register_invoke_async("on_camera_image_ready".into(), on_camera_image_ready)?; + let on_camera_image_ready_tag = + design.register_invoke_async("on_camera_image_ready".into(), on_camera_image_ready)?; // Create a program describing task chain - design.add_program("CameraProcessingProgram", move |design_instance, builder| { - builder.with_run_action( - SequenceBuilder::new() - .with_step(SyncBuilder::from_design(CAMERA_IMG_READY, design_instance)) - .with_step(Invoke::from_tag(&on_camera_image_ready_tag, design_instance.config())) - .with_step(TriggerBuilder::from_design(CAMERA_IMG_PROCESSED, design_instance)) - .build(), - ); - Ok(()) - }); + design.add_program( + "CameraProcessingProgram", + move |design_instance, builder| { + builder.with_run_action( + SequenceBuilder::new() + .with_step(SyncBuilder::from_design(CAMERA_IMG_READY, design_instance)) + .with_step(Invoke::from_tag( + &on_camera_image_ready_tag, + design_instance.config(), + )) + .with_step(TriggerBuilder::from_design( + CAMERA_IMG_PROCESSED, + design_instance, + )) + .build(), + ); + Ok(()) + }, + ); Ok(design) } @@ -94,21 +105,31 @@ fn camera_processing_component_design() -> Result { fn detect_object_component_design() -> Result { let mut design = Design::new("DetectObjectDesign".into(), DesignConfig::default()); - // Register events and invoke actions in design so it knows how to build task chains + // Register events and invoke actions in design so it knows how to build task chains design.register_event(CAMERA_IMG_PROCESSED.into())?; - let detect_objects_tag = design.register_invoke_async("detect_objects".into(), detect_objects)?; + let detect_objects_tag = + design.register_invoke_async("detect_objects".into(), detect_objects)?; let on_shutdown_tag = design.register_invoke_async("on_shutdown".into(), on_shutdown)?; // Create a program describing task chain design.add_program("DetectObjectProgram", move |design_instance, builder| { - builder.with_run_action( - SequenceBuilder::new() - .with_step(SyncBuilder::from_design(CAMERA_IMG_PROCESSED, design_instance)) - .with_step(Invoke::from_tag(&detect_objects_tag, design_instance.config())) - .build(), - ).with_stop_action( - Invoke::from_tag(&on_shutdown_tag, design_instance.config()), Duration::from_secs(2) - ); + builder + .with_run_action( + SequenceBuilder::new() + .with_step(SyncBuilder::from_design( + CAMERA_IMG_PROCESSED, + design_instance, + )) + .with_step(Invoke::from_tag( + &detect_objects_tag, + design_instance.config(), + )) + .build(), + ) + .with_stop_action( + Invoke::from_tag(&on_shutdown_tag, design_instance.config()), + Duration::from_secs(2), + ); Ok(()) }); @@ -117,18 +138,30 @@ fn detect_object_component_design() -> Result { fn main() { // Setup any logging framework you want to use. - let mut logger = TracingLibraryBuilder::new().global_log_level(Level::INFO).enable_logging(true).build(); - - logger.init_log_trace(); + let logger = LogAndTraceBuilder::new() + .global_log_level(logging_tracing::Level::INFO) + .enable_logging(true) + .build(); + // logger.init_log_trace(); // Create runtime - let (builder, _engine_id) = kyron::runtime::RuntimeBuilder::new().with_engine(ExecutionEngineBuilder::new().task_queue_size(256).workers(2)); + let (builder, _engine_id) = kyron::runtime::RuntimeBuilder::new().with_engine( + ExecutionEngineBuilder::new() + .task_queue_size(256) + .workers(2), + ); let mut runtime = builder.build().unwrap(); // Build Orchestration let mut orch = Orchestration::new() - .add_design(camera_processing_component_design().expect("Failed to create camera_processing_component_design")) - .add_design(detect_object_component_design().expect("Failed to create detect_object_component_design")) + .add_design( + camera_processing_component_design() + .expect("Failed to create camera_processing_component_design"), + ) + .add_design( + detect_object_component_design() + .expect("Failed to create detect_object_component_design"), + ) .design_done(); // Specify deployment information, ie. which event is local, which timer etc diff --git a/integration_test.sh b/integration_test.sh index f05c7d9c13..cee9529bdb 100755 --- a/integration_test.sh +++ b/integration_test.sh @@ -17,7 +17,7 @@ declare -A BUILD_TARGET_GROUPS=( [score_baselibs]="@score_baselibs//score/..." [score_communication]="@score_communication//score/mw/com:com" [score_persistency]="@score_persistency//src/cpp/src/... @score_persistency//src/rust/..." - #[score_logging]="@score_logging//src/..." + [score_kyron]="@score_kyron//src/..." [score_orchestrator]="@score_orchestrator//src/..." [score_test_scenarios]="@score_test_scenarios//..." [score_feo]="-- @score_feo//... -@score_feo//:docs -@score_feo//:ide_support -@score_feo//:needs_json" diff --git a/score_modules.MODULE.bazel b/score_modules.MODULE.bazel index a63190b264..48214eaa82 100644 --- a/score_modules.MODULE.bazel +++ b/score_modules.MODULE.bazel @@ -24,14 +24,21 @@ single_version_override( ) bazel_dep(name = "score_persistency") -single_version_override( +git_override( module_name = "score_persistency", - version = "0.2.1", + remote = "https://github.com/qorix-group/persistency.git", + commit = "49089f1ac9d232f09eb65ca086b92f67e75aaff8", ) bazel_dep(name = "score_orchestrator") single_version_override( module_name = "score_orchestrator", + version = "0.0.4", +) + +bazel_dep(name = "score_kyron") +single_version_override( + module_name = "score_kyron", version = "0.0.3", ) @@ -42,9 +49,10 @@ single_version_override( ) bazel_dep(name = "score_platform") -single_version_override( +git_override( module_name = "score_platform", - version = "0.5.0", + remote = "https://github.com/eclipse-score/score.git", + commit = "45faa6781b5c7d292d885d4e2ad95eaf21c925c5", ) bazel_dep(name = "score_bazel_platforms") @@ -56,7 +64,7 @@ single_version_override( bazel_dep(name = "score_test_scenarios") single_version_override( module_name = "score_test_scenarios", - version = "0.3.0", + version = "0.3.1", ) bazel_dep(name = "score_docs_as_code") @@ -68,7 +76,7 @@ single_version_override( bazel_dep(name = "score_process") single_version_override( module_name = "score_process", - version = "1.3.2", + version = "1.4.0", ) bazel_dep(name = "score_feo", version = "1.0.2") @@ -76,10 +84,3 @@ single_version_override( module_name = "score_feo", version = "1.0.2", ) - -bazel_dep(name = "score_kyron") -git_override( - module_name = "score_kyron", - remote = "https://github.com/eclipse-score/kyron.git", - commit = "c5837ac6612a5ebf91cd016775f2d3ee85ed6892", -) From f184b99cc60fcd4a6c7dcfc5ccd76d3331f8cfb7 Mon Sep 17 00:00:00 2001 From: Piotr Korkus Date: Fri, 12 Dec 2025 10:43:16 +0100 Subject: [PATCH 2/2] bazel: fix python integration integrated modules had dependecies changed to dev to avoid collisions --- integration_test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration_test.sh b/integration_test.sh index cee9529bdb..dc35bef5e1 100755 --- a/integration_test.sh +++ b/integration_test.sh @@ -19,7 +19,7 @@ declare -A BUILD_TARGET_GROUPS=( [score_persistency]="@score_persistency//src/cpp/src/... @score_persistency//src/rust/..." [score_kyron]="@score_kyron//src/..." [score_orchestrator]="@score_orchestrator//src/..." - [score_test_scenarios]="@score_test_scenarios//..." + [score_test_scenarios]="@score_test_scenarios//test_scenarios_rust:test_scenarios_rust @score_test_scenarios//test_scenarios_cpp:test_scenarios_cpp" [score_feo]="-- @score_feo//... -@score_feo//:docs -@score_feo//:ide_support -@score_feo//:needs_json" )