This is an automated email from the ASF dual-hosted git repository.

szaszm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git


The following commit(s) were added to refs/heads/main by this push:
     new 1a4b84eb8 MINIFICPP-2934 Update MiNiFi version to 1.1.0 (#2290)
1a4b84eb8 is described below

commit 1a4b84eb8b53eebcf7c92d83f6ae818f440e33ee
Author: Ferenc Gerlits <[email protected]>
AuthorDate: Wed Oct 28 10:49:15 2026 +0100

    MINIFICPP-2934 Update MiNiFi version to 1.1.0 (#2290)
    
    * MINIFICPP-2934 Update version number to 1.1.0
    
    * MINIFICPP-2934 Include Rust components in th Create Release Artifacts CI 
job
    
    (both in the Linux builds and in the Windows installer)
    
    * MINIFICPP-2934 Run the behave tests on the Rust extensions, as well, in 
the Verify Package CI job
    
    * fix Rust behave tests on RPM-based images
    
    * ruff fix
    
    * fix 'cargo behave-alpine' in ci.yml
    
    * fix typo
---
 .github/references/docker_manifest.json            | 52 +++++++++++-----------
 .github/workflows/ci.yml                           |  2 +-
 .github/workflows/create-release-artifacts.yml     |  4 +-
 .github/workflows/verify-package.yml               |  4 +-
 CMakeLists.txt                                     |  2 +-
 .../src/minifi_behave/containers/deployment.py     | 46 +++++++++++++++++++
 .../containers/minifi_linux_container.py           | 22 ++-------
 behave_framework/src/minifi_behave/core/hooks.py   | 46 ++++++++++++++++---
 .../src/minifi_behave/core/minifi_test_context.py  | 25 +++--------
 cmake/VerifyPackageWithDocker.cmake                |  5 ++-
 conanfile.py                                       |  2 +-
 docker/RunBehaveTests.sh                           |  2 +-
 libminifi/CMakeLists.txt                           |  2 +-
 .../minifi_pgp/features/encrypt_decrypt.feature    |  1 +
 .../minifi_tensor/features/basic.feature           | 19 ++++++--
 .../minifi_tensor/features/classification.feature  |  2 +
 .../minifi_tensor/features/detection.feature       |  1 +
 17 files changed, 153 insertions(+), 84 deletions(-)

diff --git a/.github/references/docker_manifest.json 
b/.github/references/docker_manifest.json
index 4e20333ed..c11f4cd4d 100644
--- a/.github/references/docker_manifest.json
+++ b/.github/references/docker_manifest.json
@@ -420,7 +420,7 @@
         },
         "group": "org.apache.nifi.minifi",
         "artifact": "minifi-archive-extensions",
-        "version": "1.0.0"
+        "version": "1.1.0"
     }
 },
 {
@@ -2468,7 +2468,7 @@
         },
         "group": "org.apache.nifi.minifi",
         "artifact": "minifi-aws",
-        "version": "1.0.0"
+        "version": "1.1.0"
     }
 },
 {
@@ -3535,7 +3535,7 @@
         },
         "group": "org.apache.nifi.minifi",
         "artifact": "minifi-azure",
-        "version": "1.0.0"
+        "version": "1.1.0"
     }
 },
 {
@@ -3570,7 +3570,7 @@
         },
         "group": "org.apache.nifi.minifi",
         "artifact": "minifi-bustache-extensions",
-        "version": "1.0.0"
+        "version": "1.1.0"
     }
 },
 {
@@ -3700,7 +3700,7 @@
         },
         "group": "org.apache.nifi.minifi",
         "artifact": "minifi-civet-extensions",
-        "version": "1.0.0"
+        "version": "1.1.0"
     }
 },
 {
@@ -4005,7 +4005,7 @@
         },
         "group": "org.apache.nifi.minifi",
         "artifact": "minifi-couchbase",
-        "version": "1.0.0"
+        "version": "1.1.0"
     }
 },
 {
@@ -4141,7 +4141,7 @@
         },
         "group": "org.apache.nifi.minifi",
         "artifact": "minifi-elasticsearch",
-        "version": "1.0.0"
+        "version": "1.1.0"
     }
 },
 {
@@ -4210,7 +4210,7 @@
         },
         "group": "org.apache.nifi.minifi",
         "artifact": "minifi-execute-process",
-        "version": "1.0.0"
+        "version": "1.1.0"
     }
 },
 {
@@ -4709,7 +4709,7 @@
         },
         "group": "org.apache.nifi.minifi",
         "artifact": "minifi-gcp",
-        "version": "1.0.0"
+        "version": "1.1.0"
     }
 },
 {
@@ -4975,7 +4975,7 @@
         },
         "group": "org.apache.nifi.minifi",
         "artifact": "minifi-grafana-loki",
-        "version": "1.0.0"
+        "version": "1.1.0"
     }
 },
 {
@@ -5644,7 +5644,7 @@
         },
         "group": "org.apache.nifi.minifi",
         "artifact": "minifi-kafka",
-        "version": "1.0.0"
+        "version": "1.1.0"
     }
 },
 {
@@ -5726,7 +5726,7 @@
         },
         "group": "org.apache.nifi.minifi",
         "artifact": "minifi-kubernetes-extensions",
-        "version": "1.0.0"
+        "version": "1.1.0"
     }
 },
 {
@@ -5896,7 +5896,7 @@
         },
         "group": "org.apache.nifi.minifi",
         "artifact": "minifi-llamacpp",
-        "version": "1.0.0"
+        "version": "1.1.0"
     }
 },
 {
@@ -6499,7 +6499,7 @@
         },
         "group": "org.apache.nifi.minifi",
         "artifact": "minifi-mqtt-extensions",
-        "version": "1.0.0"
+        "version": "1.1.0"
     }
 },
 {
@@ -6890,7 +6890,7 @@
         },
         "group": "org.apache.nifi.minifi",
         "artifact": "minifi-opc-extensions",
-        "version": "1.0.0"
+        "version": "1.1.0"
     }
 },
 {
@@ -6982,7 +6982,7 @@
         },
         "group": "org.apache.nifi.minifi",
         "artifact": "minifi-procfs",
-        "version": "1.0.0"
+        "version": "1.1.0"
     }
 },
 {
@@ -7027,7 +7027,7 @@
         },
         "group": "org.apache.nifi.minifi",
         "artifact": "minifi-rocksdb-repos",
-        "version": "1.0.0"
+        "version": "1.1.0"
     }
 },
 {
@@ -7105,7 +7105,7 @@
         },
         "group": "org.apache.nifi.minifi",
         "artifact": "minifi-script-extension",
-        "version": "1.0.0"
+        "version": "1.1.0"
     }
 },
 {
@@ -7986,7 +7986,7 @@
         },
         "group": "org.apache.nifi.minifi",
         "artifact": "minifi-sftp",
-        "version": "1.0.0"
+        "version": "1.1.0"
     }
 },
 {
@@ -8195,7 +8195,7 @@
         },
         "group": "org.apache.nifi.minifi",
         "artifact": "minifi-splunk",
-        "version": "1.0.0"
+        "version": "1.1.0"
     }
 },
 {
@@ -8408,7 +8408,7 @@
         },
         "group": "org.apache.nifi.minifi",
         "artifact": "minifi-sql",
-        "version": "1.0.0"
+        "version": "1.1.0"
     }
 },
 {
@@ -8572,7 +8572,7 @@
         },
         "group": "org.apache.nifi.minifi.testing",
         "artifact": "minifi-stable-api-testing",
-        "version": "1.0.0"
+        "version": "1.1.0"
     }
 },
 {
@@ -11720,7 +11720,7 @@
         },
         "group": "org.apache.nifi.minifi",
         "artifact": "minifi-standard-processors",
-        "version": "1.0.0"
+        "version": "1.1.0"
     }
 },
 {
@@ -11947,7 +11947,7 @@
         },
         "group": "org.apache.nifi.minifi",
         "artifact": "minifi-system",
-        "version": "1.0.0"
+        "version": "1.1.0"
     }
 },
 {
@@ -12052,7 +12052,7 @@
         },
         "group": "org.apache.nifi.minifi",
         "artifact": "minifi-systemd",
-        "version": "1.0.0"
+        "version": "1.1.0"
     }
 },
 {
@@ -12101,7 +12101,7 @@
         },
         "group": "org.apache.nifi.minifi",
         "artifact": "minifi-test-processors",
-        "version": "1.0.0"
+        "version": "1.1.0"
     }
 },
 {
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index c7290845b..bce44bf29 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -16,7 +16,7 @@ env:
   CCACHE_DIR: ${{ GITHUB.WORKSPACE }}/.ccache
   CONAN_LOGIN_USERNAME_NIFI_CONAN: ${{ secrets.CONAN_USERNAME }}
   CONAN_PASSWORD_NIFI_CONAN: ${{ secrets.CONAN_ACCESS_TOKEN }}
-  DOCKER_CMAKE_FLAGS: -DDOCKER_VERIFY_THREAD=3 -DUSE_SHARED_LIBS= 
-DSTRICT_GSL_CHECKS=AUDIT -DCI_BUILD=ON -DENABLE_AWS=ON -DENABLE_KAFKA=ON 
-DENABLE_MQTT=ON -DENABLE_AZURE=ON -DENABLE_SQL=ON \
+  DOCKER_CMAKE_FLAGS: -DDOCKER_VERIFY_THREADS=3 -DUSE_SHARED_LIBS= 
-DSTRICT_GSL_CHECKS=AUDIT -DCI_BUILD=ON -DENABLE_AWS=ON -DENABLE_KAFKA=ON 
-DENABLE_MQTT=ON -DENABLE_AZURE=ON -DENABLE_SQL=ON \
     -DENABLE_SPLUNK=ON -DENABLE_GCP=ON -DENABLE_OPC=ON 
-DENABLE_PYTHON_SCRIPTING=ON -DENABLE_LUA_SCRIPTING=ON -DENABLE_KUBERNETES=ON 
-DENABLE_TEST_PROCESSORS=ON -DENABLE_PROMETHEUS=ON \
     -DENABLE_ELASTICSEARCH=ON -DENABLE_GRAFANA_LOKI=ON -DENABLE_COUCHBASE=ON 
-DENABLE_LLAMACPP=ON -DMINIFI_LMDB=ON -DDOCKER_BUILD_ONLY=ON 
-DMINIFI_PERFORMANCE_TESTS=ON -DMINIFI_RUST=ON \
     -DENABLE_BUSTACHE=ON -DENABLE_SFTP=ON -DENABLE_EXECUTE_PROCESS=ON 
-DDOCKER_USE_CONAN=ON -DDOCKER_NIFI_CONAN_USER=${{ secrets.CONAN_USERNAME }} 
-DDOCKER_NIFI_CONAN_PASSWORD=${{ secrets.CONAN_ACCESS_TOKEN }}
diff --git a/.github/workflows/create-release-artifacts.yml 
b/.github/workflows/create-release-artifacts.yml
index 06e7bb9bf..ccbd039d8 100644
--- a/.github/workflows/create-release-artifacts.yml
+++ b/.github/workflows/create-release-artifacts.yml
@@ -10,7 +10,7 @@ on:
   schedule:
     - cron: '0 1 * * 1'
 env:
-  CMAKE_FLAGS: -DCMAKE_BUILD_TYPE=Release -DCI_BUILD=OFF -DENABLE_ALL=ON 
-DMINIFI_FAIL_ON_WARNINGS=OFF -DDOCKER_BUILD_ONLY=ON -DSKIP_TESTS=ON \
+  CMAKE_FLAGS: -DCMAKE_BUILD_TYPE=Release -DCI_BUILD=OFF -DENABLE_ALL=ON 
-DMINIFI_RUST=ON -DMINIFI_FAIL_ON_WARNINGS=OFF -DDOCKER_BUILD_ONLY=ON 
-DSKIP_TESTS=ON \
     -DDOCKER_USE_CONAN=${{ inputs.enable_conan && 'ON' || 'OFF' }} 
-DDOCKER_NIFI_CONAN_USER=${{ secrets.CONAN_USERNAME }} 
-DDOCKER_NIFI_CONAN_PASSWORD=${{ secrets.CONAN_ACCESS_TOKEN }}
   CONAN_LOGIN_USERNAME_NIFI_CONAN: ${{ secrets.CONAN_USERNAME }}
   CONAN_PASSWORD_NIFI_CONAN: ${{ secrets.CONAN_ACCESS_TOKEN }}
@@ -87,7 +87,7 @@ jobs:
       - name: build
         run: |
           python -m venv venv && venv\Scripts\activate && pip install -r 
requirements.txt && ^
-          python main.py --noninteractive --skip-compiler-install 
--minifi-options="-DCMAKE_BUILD_TYPE=Release -DCI_BUILD=OFF -DENABLE_ALL=ON 
-DMINIFI_FAIL_ON_WARNINGS=OFF -DSKIP_TESTS=ON -DUSE_CONAN=${{ 
inputs.enable_conan && 'ON' || 'OFF' }}"
+          python main.py --noninteractive --skip-compiler-install 
--minifi-options="-DCMAKE_BUILD_TYPE=Release -DCI_BUILD=OFF -DENABLE_ALL=ON 
-DMINIFI_RUST=ON -DMINIFI_FAIL_ON_WARNINGS=OFF -DSKIP_TESTS=ON -DUSE_CONAN=${{ 
inputs.enable_conan && 'ON' || 'OFF' }}"
         shell: cmd
         working-directory: bootstrap
       - name: Upload conan packages
diff --git a/.github/workflows/verify-package.yml 
b/.github/workflows/verify-package.yml
index 8da5782da..f673dff51 100644
--- a/.github/workflows/verify-package.yml
+++ b/.github/workflows/verify-package.yml
@@ -18,9 +18,9 @@ on:
     branches: [main]
 
 env:
-  DOCKER_CMAKE_FLAGS: -DDOCKER_VERIFY_THREAD=3 -DUSE_SHARED_LIBS= 
-DSTRICT_GSL_CHECKS=AUDIT -DCI_BUILD=ON -DENABLE_AWS=ON -DENABLE_KAFKA=ON 
-DENABLE_MQTT=ON -DENABLE_AZURE=ON -DENABLE_SQL=ON \
+  DOCKER_CMAKE_FLAGS: -DDOCKER_VERIFY_THREADS=3 -DUSE_SHARED_LIBS= 
-DSTRICT_GSL_CHECKS=AUDIT -DCI_BUILD=ON -DENABLE_AWS=ON -DENABLE_KAFKA=ON 
-DENABLE_MQTT=ON -DENABLE_AZURE=ON -DENABLE_SQL=ON \
     -DENABLE_SPLUNK=ON -DENABLE_GCP=ON -DENABLE_OPC=ON 
-DENABLE_PYTHON_SCRIPTING=ON -DENABLE_LUA_SCRIPTING=ON -DENABLE_KUBERNETES=ON 
-DENABLE_TEST_PROCESSORS=ON -DENABLE_PROMETHEUS=ON \
-    -DENABLE_ELASTICSEARCH=OFF -DENABLE_GRAFANA_LOKI=ON -DENABLE_COUCHBASE=ON 
-DDOCKER_BUILD_ONLY=ON
+    -DENABLE_ELASTICSEARCH=OFF -DENABLE_GRAFANA_LOKI=ON -DENABLE_COUCHBASE=ON 
-DMINIFI_RUST=ON -DDOCKER_BUILD_ONLY=ON
 
 jobs:
   check-artifacts-workflow:
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7e8a35b74..f9c6474c4 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -21,7 +21,7 @@ cmake_minimum_required(VERSION 3.26)
 cmake_policy(SET CMP0096 NEW) # policy to preserve the leading zeros in 
PROJECT_VERSION_{MAJOR,MINOR,PATCH,TWEAK}
 cmake_policy(SET CMP0135 NEW) # policy to set the timestamps of extracted 
contents to the time of extraction
 
-project(nifi-minifi-cpp VERSION 1.0.0)
+project(nifi-minifi-cpp VERSION 1.1.0)
 set(PROJECT_NAME "nifi-minifi-cpp")
 set(CMAKE_POLICY_VERSION_MINIMUM 3.5)
 
diff --git a/behave_framework/src/minifi_behave/containers/deployment.py 
b/behave_framework/src/minifi_behave/containers/deployment.py
new file mode 100644
index 000000000..36cab0406
--- /dev/null
+++ b/behave_framework/src/minifi_behave/containers/deployment.py
@@ -0,0 +1,46 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import docker
+
+FHS_ENV_MARKER = "MINIFI_INSTALLATION_TYPE=FHS"
+
+
+class NormalDeployment:
+    def __init__(self):
+        self.conf_path = "/opt/minifi/minifi-current/conf"
+        self.bin_path = "/opt/minifi/minifi-current/bin"
+        self.extension_dir = "/opt/minifi/minifi-current/extensions"
+        self.extension_pattern = "../extensions/*"
+        self.minifi_python_path = "/opt/minifi/minifi-current/minifi-python"
+        self.minifi_python_examples_path = 
"/opt/minifi/minifi-current/minifi-python-examples"
+
+
+class FHSDeployment:
+    def __init__(self):
+        self.conf_path = "/etc/nifi-minifi-cpp/"
+        self.bin_path = "/usr/bin"
+        self.extension_dir = "/usr/lib64/nifi-minifi-cpp/extensions"
+        self.extension_pattern = f"{self.extension_dir}/*"
+        self.minifi_python_path = "/var/lib/nifi-minifi-cpp/minifi-python"
+        self.minifi_python_examples_path = 
"/usr/share/doc/nifi-minifi-cpp/pythonprocessor-examples"
+
+
+def is_fhs_image(image: str) -> bool:
+    return FHS_ENV_MARKER in str(docker.from_env().images.get(image).history())
+
+
+def get_deployment_for_image(image: str) -> NormalDeployment | FHSDeployment:
+    return FHSDeployment() if is_fhs_image(image) else NormalDeployment()
diff --git 
a/behave_framework/src/minifi_behave/containers/minifi_linux_container.py 
b/behave_framework/src/minifi_behave/containers/minifi_linux_container.py
index 1645cbdee..285828f87 100644
--- a/behave_framework/src/minifi_behave/containers/minifi_linux_container.py
+++ b/behave_framework/src/minifi_behave/containers/minifi_linux_container.py
@@ -19,6 +19,10 @@ import logging
 import os
 from pathlib import Path
 
+from minifi_behave.containers.deployment import (
+    FHSDeployment,
+    NormalDeployment,
+)
 from minifi_behave.containers.file import File
 from minifi_behave.containers.host_file import HostFile
 from minifi_behave.core.helpers import wait_for_condition
@@ -45,24 +49,6 @@ CA_CERT_PATHS = [
 ]
 
 
-class NormalDeployment:
-    def __init__(self):
-        self.conf_path = "/opt/minifi/minifi-current/conf"
-        self.bin_path = "/opt/minifi/minifi-current/bin"
-        self.extension_pattern = "../extensions/*"
-        self.minifi_python_path = "/opt/minifi/minifi-current/minifi-python"
-        self.minifi_python_examples_path = 
"/opt/minifi/minifi-current/minifi-python-examples"
-
-
-class FHSDeployment:
-    def __init__(self):
-        self.conf_path = "/etc/nifi-minifi-cpp/"
-        self.bin_path = "/usr/bin"
-        self.extension_pattern = "/usr/lib64/nifi-minifi-cpp/extensions/*"
-        self.minifi_python_path = "/var/lib/nifi-minifi-cpp/minifi-python"
-        self.minifi_python_examples_path = 
"/usr/share/doc/nifi-minifi-cpp/pythonprocessor-examples"
-
-
 class MinifiLinuxContainer(LinuxContainer, MinifiProtocol):
     def __init__(
         self,
diff --git a/behave_framework/src/minifi_behave/core/hooks.py 
b/behave_framework/src/minifi_behave/core/hooks.py
index 7ed8754ac..240df3e64 100644
--- a/behave_framework/src/minifi_behave/core/hooks.py
+++ b/behave_framework/src/minifi_behave/core/hooks.py
@@ -21,6 +21,7 @@ from pathlib import Path
 
 from behave.model import Scenario
 from behave.runner import Context
+from minifi_behave.containers.deployment import get_deployment_for_image
 from minifi_behave.containers.docker_image_builder import DockerImageBuilder
 from minifi_behave.core.minifi_test_context import MinifiTestContext
 from minifi_behave.core.ssl_utils import make_self_signed_cert
@@ -112,15 +113,31 @@ def common_after_scenario(context: MinifiTestContext, 
scenario: Scenario):
         context.network.remove()
 
 
+def file_is_present_in_image(image: str, file_path: str, is_windows: bool) -> 
bool:
+    if is_windows:
+        command = ["cmd", "/c", f'if exist "{file_path}" (exit 0) else (exit 
1)']
+    else:
+        command = ["test", "-f", file_path]
+    try:
+        docker.from_env().containers.run(image=image, command=command, 
remove=True, detach=False)
+        return True
+    except docker.errors.ContainerError:
+        return False
+
+
 def add_extension_to_minifi_container(extension_name: str, possible_paths: 
list[str], context: MinifiTestContext):
     new_container_name = f"apacheminificpp:{extension_name}"
     is_windows = os.name == "nt"
+    base_img = get_minifi_container_image()
     if is_windows:
         lib_filename = f"{extension_name}.dll"
         container_extension_dir = "C:/Program 
Files/ApacheNiFiMiNiFi/nifi-minifi-cpp/extensions"
     else:
         lib_filename = f"lib{extension_name}.so"
-        container_extension_dir = "/opt/minifi/minifi-current/extensions/"
+        container_extension_dir = 
get_deployment_for_image(base_img).extension_dir
+
+    container_lib_path = f"{container_extension_dir}/{lib_filename}"
+    is_present_in_image = file_is_present_in_image(base_img, 
container_lib_path, is_windows)
 
     host_path = None
     for path in possible_paths:
@@ -128,13 +145,26 @@ def add_extension_to_minifi_container(extension_name: 
str, possible_paths: list[
             host_path = os.path.join(path, lib_filename)
             break
 
-    assert host_path is not None, f"Could not find {lib_filename} in {[p for p 
in possible_paths]}"
+    assert host_path is not None or is_present_in_image, (
+        f"Could not find {lib_filename} in 
{base_img}:{container_extension_dir}, "
+        f"nor on the host in {[p for p in possible_paths]}"
+    )
+
+    # A locally built extension takes precedence: it may enable cargo features 
which the
+    # packaged one does not, eg. the low-level processors of minifi_tensor
+    if host_path is None:
+        logger.info(f"'{lib_filename}' is already present in '{base_img}', 
tagging it as '{new_container_name}'")
+        docker.from_env().images.get(base_img).tag("apacheminificpp", 
tag=extension_name)
+        return new_container_name
+
+    if is_present_in_image:
+        logger.warning(f"Overriding the '{lib_filename}' in '{base_img}' with 
the locally built '{host_path}'")
+    else:
+        logger.info(f"Adding the locally built '{host_path}' to '{base_img}' 
as '{new_container_name}'")
 
     with open(host_path, "rb") as f:
         lib_content = f.read()
 
-    base_img = get_minifi_container_image()
-
     if is_windows:
         dockerfile = f"""
 FROM {base_img}
@@ -143,8 +173,8 @@ COPY ["{lib_filename}", 
"{container_extension_dir}/{lib_filename}"]
     else:
         dockerfile = f"""
 FROM {base_img}
-COPY --chown=minificpp:minificpp {lib_filename} {container_extension_dir}
-RUN chmod 755 {container_extension_dir}{lib_filename}
+COPY --chown=minificpp:minificpp {lib_filename} {container_extension_dir}/
+RUN chmod 755 {container_lib_path}
 """
 
     builder = DockerImageBuilder(
@@ -154,4 +184,8 @@ RUN chmod 755 {container_extension_dir}{lib_filename}
     )
 
     builder.build()
+
+    assert file_is_present_in_image(new_container_name, container_lib_path, 
is_windows), (
+        f"'{container_lib_path}' is missing from '{new_container_name}' after 
the build"
+    )
     return new_container_name
diff --git a/behave_framework/src/minifi_behave/core/minifi_test_context.py 
b/behave_framework/src/minifi_behave/core/minifi_test_context.py
index 910627221..c78415b32 100644
--- a/behave_framework/src/minifi_behave/core/minifi_test_context.py
+++ b/behave_framework/src/minifi_behave/core/minifi_test_context.py
@@ -26,8 +26,6 @@ from docker.models.networks import Network
 from minifi_behave.containers.container_protocol import ContainerProtocol
 from minifi_behave.containers.minifi_protocol import MinifiProtocol
 
-import docker
-
 DEFAULT_MINIFI_CONTAINER_NAME = "minifi-primary"
 
 
@@ -48,27 +46,16 @@ class MinifiTestContext(Context):
     def get_or_create_minifi_container(self, container_name: str) -> 
MinifiContainer:
         if container_name not in self.containers:
             if os.name == "nt":
-                from minifi_behave.containers.minifi_win_container import (
-                    MinifiWindowsContainer,
-                )
+                from minifi_behave.containers.minifi_win_container import 
MinifiWindowsContainer
 
                 minifi_container = MinifiWindowsContainer(container_name, self)
-            elif "MINIFI_INSTALLATION_TYPE=FHS" in str(
-                
docker.from_env().images.get(self.minifi_container_image).history()
-            ):
-                from minifi_behave.containers.minifi_linux_container import (
-                    FHSDeployment,
-                    MinifiLinuxContainer,
-                )
-
-                minifi_container = MinifiLinuxContainer(container_name, self, 
FHSDeployment())
             else:
-                from minifi_behave.containers.minifi_linux_container import (
-                    MinifiLinuxContainer,
-                    NormalDeployment,
-                )
+                from minifi_behave.containers.deployment import 
get_deployment_for_image
+                from minifi_behave.containers.minifi_linux_container import 
MinifiLinuxContainer
 
-                minifi_container = MinifiLinuxContainer(container_name, self, 
NormalDeployment())
+                minifi_container = MinifiLinuxContainer(
+                    container_name, self, 
get_deployment_for_image(self.minifi_container_image)
+                )
             self.containers[container_name] = minifi_container
         return self.containers[container_name]
 
diff --git a/cmake/VerifyPackageWithDocker.cmake 
b/cmake/VerifyPackageWithDocker.cmake
index 19cd0291e..ca6de6010 100644
--- a/cmake/VerifyPackageWithDocker.cmake
+++ b/cmake/VerifyPackageWithDocker.cmake
@@ -20,8 +20,9 @@ set(MINIFI_VERSION_STR 
${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJE
 function(ADD_PACKAGE_VERIFY TAG_PREFIX)
     set(ENABLED_TAGS "CORE")
     foreach(MINIFI_OPTION ${MINIFI_OPTIONS})
-        string(FIND ${MINIFI_OPTION} "ENABLE" my_index)
-        if(my_index EQUAL -1)
+        string(FIND ${MINIFI_OPTION} "ENABLE" enable_index)
+        string(FIND ${MINIFI_OPTION} "MINIFI_EXTENSION" minifi_extension_index)
+        if(enable_index EQUAL -1 AND minifi_extension_index EQUAL -1)
             continue()
         elseif(${${MINIFI_OPTION}})
             set(ENABLED_TAGS "${ENABLED_TAGS},${MINIFI_OPTION}")
diff --git a/conanfile.py b/conanfile.py
index 08f3d9233..274b066d1 100644
--- a/conanfile.py
+++ b/conanfile.py
@@ -95,7 +95,7 @@ shared_sources = (
 
 class MiNiFiCppMain(ConanFile):
     name = "minifi-cpp"
-    version = "1.0.0"
+    version = "1.1.0"
     license = "Apache-2.0"
     settings = "os", "compiler", "build_type", "arch"
     generators = "CMakeDeps"
diff --git a/docker/RunBehaveTests.sh b/docker/RunBehaveTests.sh
index 6492921e2..a6ed21e7a 100755
--- a/docker/RunBehaveTests.sh
+++ b/docker/RunBehaveTests.sh
@@ -179,6 +179,6 @@ echo "${BEHAVE_OPTS[@]}"
 FEATURE_FILES=()
 while IFS= read -r -d '' file; do
     FEATURE_FILES+=("$file")
-done < <(find "${docker_dir}/../extensions" -type f -name '*.feature' -print0)
+done < <(find "${docker_dir}/../extensions" 
"${docker_dir}/../minifi_rust/extensions" -type f -name '*.feature' -print0)
 
 behavex "${BEHAVE_OPTS[@]}" "${FEATURE_FILES[@]}"
diff --git a/libminifi/CMakeLists.txt b/libminifi/CMakeLists.txt
index 20cbef546..6db9697cb 100644
--- a/libminifi/CMakeLists.txt
+++ b/libminifi/CMakeLists.txt
@@ -20,7 +20,7 @@
 cmake_minimum_required (VERSION 3.26)
 cmake_policy(SET CMP0096 NEW) # policy to preserve the leading zeros in 
PROJECT_VERSION_{MAJOR,MINOR,PATCH,TWEAK}
 cmake_policy(SET CMP0135 NEW) # policy to set the timestamps of extracted 
contents to the time of extraction
-project(nifi-libcore-minifi VERSION 1.0.0)
+project(nifi-libcore-minifi VERSION 1.1.0)
 set(PROJECT_NAME "nifi-libcore-minifi")
 
 if (WIN32)
diff --git a/minifi_rust/extensions/minifi_pgp/features/encrypt_decrypt.feature 
b/minifi_rust/extensions/minifi_pgp/features/encrypt_decrypt.feature
index 202a01307..47c7d48c8 100644
--- a/minifi_rust/extensions/minifi_pgp/features/encrypt_decrypt.feature
+++ b/minifi_rust/extensions/minifi_pgp/features/encrypt_decrypt.feature
@@ -13,6 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+@MINIFI_EXTENSION_PGP
 @SUPPORTS_WINDOWS
 Feature: Test PGP extension's encryption and decryption capabilities
 
diff --git a/minifi_rust/extensions/minifi_tensor/features/basic.feature 
b/minifi_rust/extensions/minifi_tensor/features/basic.feature
index 0718f98c1..c4a46e8e4 100644
--- a/minifi_rust/extensions/minifi_tensor/features/basic.feature
+++ b/minifi_rust/extensions/minifi_tensor/features/basic.feature
@@ -16,7 +16,21 @@
 @SUPPORTS_WINDOWS
 Feature: minifi_tensor extension loads
 
-  Scenario: All processors and the TractModelService register cleanly
+  @MINIFI_EXTENSION_TENSOR
+  Scenario: All high-level processors and the TractModelService register 
cleanly
+    Given log property 
"logger.org::apache::nifi::minifi::core::extension::ExtensionManager" is set to 
"TRACE,stderr"
+    And log property "logger.org::apache::nifi::minifi::core::ClassLoader" is 
set to "TRACE,stderr"
+
+    When the MiNiFi instance starts up
+
+    Then the Minifi logs contain the following message: "Registering class 
'ClassifyImage' at '/minifi_tensor'" in less than 1 seconds
+    And the Minifi logs contain the following message: "Registering class 
'DetectObject' at '/minifi_tensor'" in less than 1 seconds
+    And the Minifi logs contain the following message: "Registering class 
'DrawBoundingBox' at '/minifi_tensor'" in less than 1 seconds
+    And the Minifi logs contain the following message: "Registering class 
'TractModelService' at '/minifi_tensor'" in less than 1 seconds
+    And the Minifi logs do not contain errors
+    And the Minifi logs do not contain warnings
+
+  Scenario: All low-level processors register cleanly
     Given log property 
"logger.org::apache::nifi::minifi::core::extension::ExtensionManager" is set to 
"TRACE,stderr"
     And log property "logger.org::apache::nifi::minifi::core::ClassLoader" is 
set to "TRACE,stderr"
 
@@ -26,8 +40,5 @@ Feature: minifi_tensor extension loads
     And the Minifi logs contain the following message: "Registering class 
'InvokeTractModel' at '/minifi_tensor'" in less than 1 seconds
     And the Minifi logs contain the following message: "Registering class 
'FilterBoundingBoxes' at '/minifi_tensor'" in less than 1 seconds
     And the Minifi logs contain the following message: "Registering class 
'ClassifyOutput' at '/minifi_tensor'" in less than 1 seconds
-    And the Minifi logs contain the following message: "Registering class 
'TractModelService' at '/minifi_tensor'" in less than 1 seconds
-    And the Minifi logs contain the following message: "Registering class 
'ClassifyImage' at '/minifi_tensor'" in less than 1 seconds
-    And the Minifi logs contain the following message: "Registering class 
'DetectObject' at '/minifi_tensor'" in less than 1 seconds
     And the Minifi logs do not contain errors
     And the Minifi logs do not contain warnings
diff --git 
a/minifi_rust/extensions/minifi_tensor/features/classification.feature 
b/minifi_rust/extensions/minifi_tensor/features/classification.feature
index ca0c26874..4acad49a5 100644
--- a/minifi_rust/extensions/minifi_tensor/features/classification.feature
+++ b/minifi_rust/extensions/minifi_tensor/features/classification.feature
@@ -76,6 +76,7 @@ Feature: Image classification with MobileNetV2
     And the Minifi logs do not contain errors
 
   # Based on 
https://github.com/sonos/tract/tree/main/examples/onnx-mobilenet-v2
+  @MINIFI_EXTENSION_TENSOR
   Scenario: Grace Hopper image is classified using MobileNetV2 ONNX and 
imagenet labels (ClassifyImage)
     Given a host resource file "grace_hopper.jpg" is copied to the 
"/tmp/input/grace_hopper.jpg" path in the MiNiFi container
     And a host resource file "mobilenetv2-7.onnx" is copied to the 
"/tmp/models/mobilenetv2-7.onnx" path in the MiNiFi container
@@ -127,6 +128,7 @@ Feature: Image classification with MobileNetV2
     And at least one file in "/tmp/output" content match the following regex: 
"\"class_name\":\"(military uniform|bulletproof vest|suit|Windsor tie)\"" in 
less than 30 seconds
     And the Minifi logs do not contain errors
 
+  @MINIFI_EXTENSION_TENSOR
   Scenario: ClassifyImage shouldn't schedule with invalid TractModelService
     Given a TractModelService controller service named "MobileNet" is set up 
and the "Model File Path" property set to "/tmp/models/invalid.onnx"
 
diff --git a/minifi_rust/extensions/minifi_tensor/features/detection.feature 
b/minifi_rust/extensions/minifi_tensor/features/detection.feature
index 5635060d3..617eec7a8 100644
--- a/minifi_rust/extensions/minifi_tensor/features/detection.feature
+++ b/minifi_rust/extensions/minifi_tensor/features/detection.feature
@@ -74,6 +74,7 @@ Feature: Face detection with UltraFace Single Shot MultiBox 
Detector (SSD)
     And the Minifi logs do not contain errors
 
   # Based on 
https://github.com/sonos/tract/blob/main/examples/face_detection_yolov8onnx_example/src/main.rs
+  @MINIFI_EXTENSION_TENSOR
   Scenario: Grace Hopper image yields at least one face detection 
(DetectObject)
     Given a host resource file "grace_hopper.jpg" is copied to the 
"/tmp/input/grace_hopper.jpg" path in the MiNiFi container
     And a host resource file "version-RFB-320.onnx" is copied to the 
"/tmp/models/ultraface.onnx" path in the MiNiFi container

Reply via email to