Skip to content

Commit 35aa05b

Browse files
committed
Merge remote-tracking branch 'origin/main' into rust-2024-upgrade
# Conflicts: # Cargo.toml # rust/operator-binary/src/controller.rs # rust/operator-binary/src/controller/build/jvm.rs # rust/operator-binary/src/controller/build/resource/reporting_task.rs
2 parents 30c162f + af66166 commit 35aa05b

129 files changed

Lines changed: 6196 additions & 5363 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/build.yaml

Lines changed: 121 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ on:
2323

2424
env:
2525
OPERATOR_NAME: "nifi-operator"
26-
RUST_NIGHTLY_TOOLCHAIN_VERSION: "nightly-2026-02-24"
26+
RUST_NIGHTLY_TOOLCHAIN_VERSION: "nightly-2026-07-01"
2727
NIX_PKG_MANAGER_VERSION: "2.33.3"
28-
RUST_TOOLCHAIN_VERSION: "1.93.0"
28+
RUST_TOOLCHAIN_VERSION: "1.95.0"
2929
HADOLINT_VERSION: "v2.14.0"
3030
PYTHON_VERSION: "3.14"
3131
CARGO_TERM_COLOR: always
@@ -48,7 +48,7 @@ jobs:
4848

4949
- name: Check for changed files
5050
id: check
51-
uses: stackabletech/actions/detect-changes@6a84fcfccf4ee37d85217407bc6a94742afbb45f # v0.14.2
51+
uses: stackabletech/actions/detect-changes@a8af17a19bdcc3b5da0065f76e73827ba0c072ce # v0.16.0
5252
with:
5353
patterns: |
5454
- '.github/workflows/build.yaml'
@@ -83,9 +83,8 @@ jobs:
8383
submodules: recursive
8484

8585
- name: Install Rust ${{ env.RUST_TOOLCHAIN_VERSION }} toolchain
86-
uses: dtolnay/rust-toolchain@b3b07ba8b418998c39fb20f53e8b695cdcc8de1b
87-
with:
88-
toolchain: ${{ env.RUST_TOOLCHAIN_VERSION }}
86+
shell: bash
87+
run: rustup toolchain install "${RUST_TOOLCHAIN_VERSION}"
8988

9089
- name: Setup Rust Cache
9190
uses: Swatinem/rust-cache@98c8021b550208e191a6a3145459bfc9fb29c4c0 # v2.8.0
@@ -160,22 +159,21 @@ jobs:
160159
uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31.5.2
161160

162161
- name: Install Rust ${{ env.RUST_TOOLCHAIN_VERSION }} Toolchain
163-
uses: dtolnay/rust-toolchain@b3b07ba8b418998c39fb20f53e8b695cdcc8de1b
164-
with:
165-
toolchain: ${{ env.RUST_TOOLCHAIN_VERSION }}
162+
shell: bash
163+
run: rustup toolchain install "${RUST_TOOLCHAIN_VERSION}"
166164

167165
- name: Build Container Image
168166
id: build
169-
uses: stackabletech/actions/build-container-image@6a84fcfccf4ee37d85217407bc6a94742afbb45f # v0.14.2
167+
uses: stackabletech/actions/build-container-image@a8af17a19bdcc3b5da0065f76e73827ba0c072ce # v0.16.0
170168
with:
171169
image-name: ${{ env.OPERATOR_NAME }}
172170
image-index-manifest-tag: ${{ steps.version.outputs.OPERATOR_VERSION }}
173171
build-arguments: VERSION=${{ steps.version.outputs.OPERATOR_VERSION }}
174172
container-file: docker/Dockerfile
175173

176-
- name: Publish Container Image
174+
- name: Publish Container Image to oci.stackable.tech
177175
if: ${{ !github.event.pull_request.head.repo.fork }}
178-
uses: stackabletech/actions/publish-image@6a84fcfccf4ee37d85217407bc6a94742afbb45f # v0.14.2
176+
uses: stackabletech/actions/publish-image@a8af17a19bdcc3b5da0065f76e73827ba0c072ce # v0.16.0
179177
with:
180178
image-registry-uri: oci.stackable.tech
181179
image-registry-username: robot$sdp+github-action-build
@@ -184,6 +182,17 @@ jobs:
184182
image-manifest-tag: ${{ steps.build.outputs.image-manifest-tag }}
185183
source-image-uri: ${{ steps.build.outputs.image-manifest-uri }}
186184

185+
- name: Publish Container Image to quay.io
186+
if: ${{ !github.event.pull_request.head.repo.fork }}
187+
uses: stackabletech/actions/publish-image@a8af17a19bdcc3b5da0065f76e73827ba0c072ce # v0.16.0
188+
with:
189+
image-registry-uri: quay.io
190+
image-registry-username: stackable+robot_sdp_github_action_build
191+
image-registry-password: ${{ secrets.QUAY_ROBOT_SDP_GITHUB_ACTION_BUILD_SECRET }}
192+
image-repository: stackable/sdp/${{ env.OPERATOR_NAME }}
193+
image-manifest-tag: ${{ steps.build.outputs.image-manifest-tag }}
194+
source-image-uri: ${{ steps.build.outputs.image-manifest-uri }}
195+
187196
publish-index-manifest:
188197
name: Publish/Sign ${{ needs.build-container-image.outputs.operator-version }} Index
189198
if: |
@@ -196,21 +205,93 @@ jobs:
196205
permissions:
197206
id-token: write
198207
runs-on: ubuntu-latest
208+
outputs:
209+
oci-index-digest: ${{ steps.publish-oci.outputs.image-index-manifest-digest }}
210+
quay-index-digest: ${{ steps.publish-quay.outputs.image-index-manifest-digest }}
199211
steps:
200212
- name: Checkout Repository
201213
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
202214
with:
203215
persist-credentials: false
204216

205-
- name: Publish and Sign Image Index
206-
uses: stackabletech/actions/publish-image-index-manifest@6a84fcfccf4ee37d85217407bc6a94742afbb45f # v0.14.2
217+
- name: Publish and Sign Image Index to oci.stackable.tech
218+
id: publish-oci
219+
uses: stackabletech/actions/publish-image-index-manifest@a8af17a19bdcc3b5da0065f76e73827ba0c072ce # v0.16.0
207220
with:
208221
image-registry-uri: oci.stackable.tech
209222
image-registry-username: robot$sdp+github-action-build
210223
image-registry-password: ${{ secrets.HARBOR_ROBOT_SDP_GITHUB_ACTION_BUILD_SECRET }}
211224
image-repository: sdp/${{ env.OPERATOR_NAME }}
212225
image-index-manifest-tag: ${{ needs.build-container-image.outputs.operator-version }}
213226

227+
- name: Publish and Sign Image Index to quay.io
228+
id: publish-quay
229+
uses: stackabletech/actions/publish-image-index-manifest@a8af17a19bdcc3b5da0065f76e73827ba0c072ce # v0.16.0
230+
with:
231+
image-registry-uri: quay.io
232+
image-registry-username: stackable+robot_sdp_github_action_build
233+
image-registry-password: ${{ secrets.QUAY_ROBOT_SDP_GITHUB_ACTION_BUILD_SECRET }}
234+
image-repository: stackable/sdp/${{ env.OPERATOR_NAME }}
235+
image-index-manifest-tag: ${{ needs.build-container-image.outputs.operator-version }}
236+
237+
# Generate SLSA build provenance for the multi-arch image index and attach it
238+
# to the published image in each registry. The reusable workflow signs the
239+
# provenance with keyless signing (GitHub Actions as the OIDC identity) and
240+
# pushes the attestation next to the image.
241+
provenance-oci:
242+
name: Generate Provenance for ${{ needs.build-container-image.outputs.operator-version }} (oci.stackable.tech)
243+
if: |
244+
(github.event_name != 'merge_group')
245+
&& needs.detect-changes.outputs.detected == 'true'
246+
&& !github.event.pull_request.head.repo.fork
247+
needs:
248+
- detect-changes
249+
- build-container-image
250+
- publish-index-manifest
251+
permissions:
252+
actions: read # detect the build workflow that generated the image
253+
id-token: write # mint the OIDC token for keyless signing
254+
packages: write # needed until https://github.com/slsa-framework/slsa-github-generator/issues/1257 is resolved
255+
# MUST be referenced by a @vX.Y.Z tag (not a SHA), otherwise the reusable
256+
# workflow cannot verify its own provenance.
257+
uses: slsa-framework/slsa-github-generator/.github/workflows/generator_container_slsa3.yml@v2.1.0
258+
with:
259+
# The 'env' context is not available in job-level 'with' inputs of
260+
# reusable workflow calls (unlike step-level 'with'), so OPERATOR_NAME
261+
# can't be used here and the operator name is templated in directly.
262+
image: oci.stackable.tech/sdp/nifi-operator
263+
digest: ${{ needs.publish-index-manifest.outputs.oci-index-digest }}
264+
registry-username: robot$sdp+github-action-build
265+
secrets:
266+
registry-password: ${{ secrets.HARBOR_ROBOT_SDP_GITHUB_ACTION_BUILD_SECRET }}
267+
268+
provenance-quay:
269+
name: Generate Provenance for ${{ needs.build-container-image.outputs.operator-version }} (quay.io)
270+
if: |
271+
(github.event_name != 'merge_group')
272+
&& needs.detect-changes.outputs.detected == 'true'
273+
&& !github.event.pull_request.head.repo.fork
274+
needs:
275+
- detect-changes
276+
- build-container-image
277+
- publish-index-manifest
278+
permissions:
279+
actions: read # detect the build workflow that generated the image
280+
id-token: write # mint the OIDC token for keyless signing
281+
packages: write # needed until https://github.com/slsa-framework/slsa-github-generator/issues/1257 is resolved
282+
# MUST be referenced by a @vX.Y.Z tag (not a SHA), otherwise the reusable
283+
# workflow cannot verify its own provenance.
284+
uses: slsa-framework/slsa-github-generator/.github/workflows/generator_container_slsa3.yml@v2.1.0
285+
with:
286+
# The 'env' context is not available in job-level 'with' inputs of
287+
# reusable workflow calls (unlike step-level 'with'), so OPERATOR_NAME
288+
# can't be used here and the operator name is templated in directly.
289+
image: quay.io/stackable/sdp/nifi-operator
290+
digest: ${{ needs.publish-index-manifest.outputs.quay-index-digest }}
291+
registry-username: stackable+robot_sdp_github_action_build
292+
secrets:
293+
registry-password: ${{ secrets.QUAY_ROBOT_SDP_GITHUB_ACTION_BUILD_SECRET }}
294+
214295
publish-helm-chart:
215296
name: Package/Publish ${{ needs.build-container-image.outputs.operator-version }} Helm Chart
216297
if: |
@@ -229,8 +310,8 @@ jobs:
229310
persist-credentials: false
230311
submodules: recursive
231312

232-
- name: Package, Publish, and Sign Helm Chart
233-
uses: stackabletech/actions/publish-helm-chart@6a84fcfccf4ee37d85217407bc6a94742afbb45f # v0.14.2
313+
- name: Package, Publish, and Sign Helm Chart to oci.stackable.tech
314+
uses: stackabletech/actions/publish-helm-chart@a8af17a19bdcc3b5da0065f76e73827ba0c072ce # v0.16.0
234315
with:
235316
chart-registry-uri: oci.stackable.tech
236317
chart-registry-username: robot$sdp-charts+github-action-build
@@ -241,6 +322,19 @@ jobs:
241322
app-version: ${{ needs.build-container-image.outputs.operator-version }}
242323
publish-and-sign: ${{ !github.event.pull_request.head.repo.fork }}
243324

325+
- name: Package, Publish, and Sign Helm Chart to quay.io
326+
uses: stackabletech/actions/publish-helm-chart@a8af17a19bdcc3b5da0065f76e73827ba0c072ce # v0.16.0
327+
with:
328+
chart-registry-uri: quay.io
329+
chart-registry-username: stackable+robot_sdp_charts_github_action_build
330+
chart-registry-password: ${{ secrets.QUAY_ROBOT_SDP_CHARTS_GITHUB_ACTION_BUILD_SECRET }}
331+
chart-repository: stackable/sdp-charts
332+
chart-directory: deploy/helm/${{ env.OPERATOR_NAME }}
333+
chart-version: ${{ needs.build-container-image.outputs.operator-version }}
334+
app-version: ${{ needs.build-container-image.outputs.operator-version }}
335+
publish-and-sign: ${{ !github.event.pull_request.head.repo.fork }}
336+
helm-version: v3.17.4 # This is currently the latest version which supports pushing to quay.io
337+
244338
openshift-preflight-check:
245339
name: Run OpenShift Preflight Check for ${{ needs.build-container-image.outputs.operator-version }}-${{ matrix.arch }}
246340
if: |
@@ -259,12 +353,18 @@ jobs:
259353
- arm64
260354
runs-on: ubuntu-latest
261355
steps:
262-
- name: Run OpenShift Preflight Check
263-
uses: stackabletech/actions/run-openshift-preflight@6a84fcfccf4ee37d85217407bc6a94742afbb45f # v0.14.2
356+
- name: Run OpenShift Preflight Check for oci.stackable.tech
357+
uses: stackabletech/actions/run-openshift-preflight@a8af17a19bdcc3b5da0065f76e73827ba0c072ce # v0.16.0
264358
with:
265359
image-index-uri: oci.stackable.tech/sdp/${{ env.OPERATOR_NAME }}:${{ needs.build-container-image.outputs.operator-version }}
266360
image-architecture: ${{ matrix.arch }}
267361

362+
- name: Run OpenShift Preflight Check for quay.io
363+
uses: stackabletech/actions/run-openshift-preflight@a8af17a19bdcc3b5da0065f76e73827ba0c072ce # v0.16.0
364+
with:
365+
image-index-uri: quay.io/stackable/sdp/${{ env.OPERATOR_NAME }}:${{ needs.build-container-image.outputs.operator-version }}
366+
image-architecture: ${{ matrix.arch }}
367+
268368
# This job is a required check in GitHub Settings for this repository.
269369
# It saves us having to list many required jobs, or work around dynamically
270370
# named jobs (since there is no concept of required settings).
@@ -291,6 +391,8 @@ jobs:
291391
- detect-changes
292392
- build-container-image
293393
- publish-index-manifest
394+
- provenance-oci
395+
- provenance-quay
294396
- publish-helm-chart
295397
runs-on: ubuntu-latest
296398
steps:
@@ -300,7 +402,7 @@ jobs:
300402
persist-credentials: false
301403

302404
- name: Send Notification
303-
uses: stackabletech/actions/send-slack-notification@6a84fcfccf4ee37d85217407bc6a94742afbb45f # v0.14.2
405+
uses: stackabletech/actions/send-slack-notification@a8af17a19bdcc3b5da0065f76e73827ba0c072ce # v0.16.0
304406
with:
305407
publish-helm-chart-result: ${{ needs.publish-helm-chart.result }}
306408
publish-manifests-result: ${{ needs.publish-index-manifest.result }}

.github/workflows/integration-test.yml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ on:
2323
test:
2424
description: Name of the test. Only used of test-mode is `custom`
2525

26+
permissions: {}
27+
2628
jobs:
2729
test:
2830
name: Run Integration Test
@@ -41,7 +43,7 @@ jobs:
4143
# TODO: Enable the scheduled runs which hard-code what profile to use
4244
- name: Run Integration Test
4345
id: test
44-
uses: stackabletech/actions/run-integration-test@6a84fcfccf4ee37d85217407bc6a94742afbb45f # v0.14.2
46+
uses: stackabletech/actions/run-integration-test@a8af17a19bdcc3b5da0065f76e73827ba0c072ce # v0.16.0
4547
with:
4648
replicated-api-token: ${{ secrets.REPLICATED_API_TOKEN }}
4749
test-mode-input: ${{ inputs.test-mode-input }}
@@ -51,7 +53,7 @@ jobs:
5153

5254
- name: Send Notification
5355
if: ${{ failure() || github.run_attempt > 1 }}
54-
uses: stackabletech/actions/send-slack-notification@6a84fcfccf4ee37d85217407bc6a94742afbb45f # v0.14.2
56+
uses: stackabletech/actions/send-slack-notification@a8af17a19bdcc3b5da0065f76e73827ba0c072ce # v0.16.0
5557
with:
5658
slack-token: ${{ secrets.SLACK_INTEGRATION_TEST_TOKEN }}
5759
failed-tests: ${{ steps.test.outputs.failed-tests }}
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
11
---
2-
name: pre-commit
2+
name: prek
33

44
on:
55
pull_request:
66
merge_group:
77

8+
permissions: {}
9+
810
env:
911
CARGO_TERM_COLOR: always
1012
NIX_PKG_MANAGER_VERSION: "2.33.3"
11-
RUST_TOOLCHAIN_VERSION: "nightly-2026-02-24"
13+
RUST_TOOLCHAIN_VERSION: "nightly-2026-07-01"
1214
HADOLINT_VERSION: "v2.14.0"
13-
PYTHON_VERSION: "3.14"
1415
JINJA2_CLI_VERSION: "1.0.0"
1516

1617
jobs:
17-
pre-commit:
18+
prek:
1819
runs-on: ubuntu-latest
1920
steps:
2021
- name: Install host dependencies
@@ -27,9 +28,8 @@ jobs:
2728
persist-credentials: false
2829
submodules: recursive
2930
fetch-depth: 0
30-
- uses: stackabletech/actions/run-pre-commit@6a84fcfccf4ee37d85217407bc6a94742afbb45f # v0.14.2
31+
- uses: stackabletech/actions/run-prek@a8af17a19bdcc3b5da0065f76e73827ba0c072ce # v0.16.0
3132
with:
32-
python-version: ${{ env.PYTHON_VERSION }}
3333
rust: ${{ env.RUST_TOOLCHAIN_VERSION }}
3434
hadolint: ${{ env.HADOLINT_VERSION }}
3535
nix: ${{ env.NIX_PKG_MANAGER_VERSION }}

.pre-commit-config.yaml

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ repos:
1515
- id: detect-private-key
1616

1717
- repo: https://github.com/EmbarkStudios/cargo-deny
18-
rev: 8d76e7e991107da82c4a59cdc362a2739539f55d # 0.18.9
18+
rev: 1c9ca2b643ee15722178c1350501aabb024dd6f3 # 0.19.9
1919
hooks:
2020
- id: cargo-deny
2121
args: ["--all-features", "check", "advisories", "bans", "licenses", "sources"]
@@ -27,7 +27,7 @@ repos:
2727
args: ["--strict"]
2828

2929
- repo: https://github.com/igorshubovych/markdownlint-cli
30-
rev: 192ad822316c3a22fb3d3cc8aa6eafa0b8488360 # 0.45.0
30+
rev: a4d5d37e66ebcd6b3705204a1d6dbb56dea66338 # 0.49.0
3131
hooks:
3232
- id: markdownlint
3333
types: [text]
@@ -38,20 +38,24 @@ repos:
3838
hooks:
3939
- id: shellcheck
4040
args: ["--severity=info"]
41+
# Temporarily needed until all getting_started.sh.j2 scripts are made non-executable.
42+
# As long as they are, prek will treat them as shell scripts and so this hook will fail.
43+
# pre-commit behaves differently apparently and doesn't pass .j2 files to this hook.
44+
exclude: \.j2$
4145

4246
# WARNING (@NickLarsenNZ): Nix users need to install ruff first.
4347
# If you do not, you will need to delete the cached ruff binary shown in the
4448
# error message
4549
- repo: https://github.com/astral-sh/ruff-pre-commit
46-
rev: 3b4bc031619cde2e0a9f3c4441ac7cc8227245a4 # 0.14.1
50+
rev: c59bba8fb259db0fec2bbb77ad8ba51ea7341b56 # 0.15.20
4751
hooks:
4852
# Run the linter.
4953
- id: ruff-check
5054
# Run the formatter.
5155
- id: ruff-format
5256

5357
- repo: https://github.com/rhysd/actionlint
54-
rev: e7d448ef7507c20fc4c88a95d0c448b848cd6127 # 1.7.8
58+
rev: 914e7df21a07ef503a81201c76d2b11c789d3fca # 1.7.12
5559
hooks:
5660
- id: actionlint
5761

@@ -105,7 +109,7 @@ repos:
105109
- id: cargo-rustfmt
106110
name: cargo-rustfmt
107111
language: system
108-
entry: cargo +nightly-2026-02-24 fmt --all -- --check
112+
entry: cargo +nightly-2026-07-01 fmt --all -- --check
109113
stages: [pre-commit, pre-merge-commit]
110114
pass_filenames: false
111115
files: \.rs$
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
<!-- markdownlint-disable MD041 MD051 -->
2-
It is part of the Stackable Data Platform, a curated selection of the best open source data apps like Apache Kafka, Apache Druid, Trino or Apache Spark, [all](#other-operators) working together seamlessly. Based on Kubernetes, it runs everywhere – [on prem or in the cloud](#supported-platforms).
2+
It is part of the Stackable Data Platform, a curated selection of the best open source data apps like Apache Kafka®, OpenSearch, Trino or Apache Spark, [all](#other-operators) working together seamlessly. Based on Kubernetes, it runs everywhere – [on prem or in the cloud](#supported-platforms).

.vscode/settings.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"rust-analyzer.rustfmt.overrideCommand": [
33
"rustfmt",
4-
"+nightly-2026-02-24",
4+
"+nightly-2026-07-01",
55
"--edition",
66
"2024",
77
"--"

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ All notable changes to this project will be documented in this file.
2020
- Default `nifi.cluster.flow.election.max.wait.time` to NiFi's upstream value (`5 mins`) instead of the operator's previous `1 mins`. The operator no longer sets this property explicitly; the previous shorter value was left over from a TODO marked as "for testing" and may have caused flow election to settle on incomplete vote sets in cold-start scenarios ([#936]).
2121
- Set `nifi.content.repository.archive.max.retention.period` to `3 days` (previously empty, which NiFi interprets as `Long.MAX_VALUE` and effectively disables time-based archive purge). Without a time-based ceiling, the content archive can grow to half the content PVC and accumulate millions of files, which makes the synchronous startup directory scan in `FileSystemRepository.initializeRepository` very slow. Users requiring a longer content-replay window can extend via `configOverrides`. The provenance audit trail is independent of this setting and unaffected ([#936]).
2222
- test: Bump vector-aggregator to 0.55.0, replace /graphql call with gRPC call ([#940]).
23+
- BREAKING: Removed product-config machinery. This is a breaking change in terms of configuration.
24+
Users relying on the product-config `properties.yaml` file have to set these properties via the CRD ([#945]).
2325

2426
### Fixed
2527

@@ -34,6 +36,7 @@ All notable changes to this project will be documented in this file.
3436
[#935]: https://github.com/stackabletech/nifi-operator/pull/935
3537
[#936]: https://github.com/stackabletech/nifi-operator/pull/936
3638
[#940]: https://github.com/stackabletech/nifi-operator/pull/940
39+
[#945]: https://github.com/stackabletech/nifi-operator/pull/945
3740

3841
## [26.3.0] - 2026-03-16
3942

0 commit comments

Comments
 (0)