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