Skip to content

Commit 636d92c

Browse files
authored
Merge branch 'main' into chore/connect-kerberos-iceberg
2 parents 5039752 + 85715a7 commit 636d92c

14 files changed

Lines changed: 207 additions & 25 deletions

File tree

.github/workflows/build.yaml

Lines changed: 50 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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@a14cbd08d9e034e2361ea9205b32aff0491885db # v0.15.0
5252
with:
5353
patterns: |
5454
- '.github/workflows/build.yaml'
@@ -166,16 +166,16 @@ jobs:
166166

167167
- name: Build Container Image
168168
id: build
169-
uses: stackabletech/actions/build-container-image@6a84fcfccf4ee37d85217407bc6a94742afbb45f # v0.14.2
169+
uses: stackabletech/actions/build-container-image@a14cbd08d9e034e2361ea9205b32aff0491885db # v0.15.0
170170
with:
171171
image-name: ${{ env.OPERATOR_NAME }}
172172
image-index-manifest-tag: ${{ steps.version.outputs.OPERATOR_VERSION }}
173173
build-arguments: VERSION=${{ steps.version.outputs.OPERATOR_VERSION }}
174174
container-file: docker/Dockerfile
175175

176-
- name: Publish Container Image
176+
- name: Publish Container Image to oci.stackable.tech
177177
if: ${{ !github.event.pull_request.head.repo.fork }}
178-
uses: stackabletech/actions/publish-image@6a84fcfccf4ee37d85217407bc6a94742afbb45f # v0.14.2
178+
uses: stackabletech/actions/publish-image@a14cbd08d9e034e2361ea9205b32aff0491885db # v0.15.0
179179
with:
180180
image-registry-uri: oci.stackable.tech
181181
image-registry-username: robot$sdp+github-action-build
@@ -184,6 +184,17 @@ jobs:
184184
image-manifest-tag: ${{ steps.build.outputs.image-manifest-tag }}
185185
source-image-uri: ${{ steps.build.outputs.image-manifest-uri }}
186186

187+
- name: Publish Container Image to quay.io
188+
if: ${{ !github.event.pull_request.head.repo.fork }}
189+
uses: stackabletech/actions/publish-image@a14cbd08d9e034e2361ea9205b32aff0491885db # v0.15.0
190+
with:
191+
image-registry-uri: quay.io
192+
image-registry-username: stackable+robot_sdp_github_action_build
193+
image-registry-password: ${{ secrets.QUAY_ROBOT_SDP_GITHUB_ACTION_BUILD_SECRET }}
194+
image-repository: stackable/sdp/${{ env.OPERATOR_NAME }}
195+
image-manifest-tag: ${{ steps.build.outputs.image-manifest-tag }}
196+
source-image-uri: ${{ steps.build.outputs.image-manifest-uri }}
197+
187198
publish-index-manifest:
188199
name: Publish/Sign ${{ needs.build-container-image.outputs.operator-version }} Index
189200
if: |
@@ -202,15 +213,24 @@ jobs:
202213
with:
203214
persist-credentials: false
204215

205-
- name: Publish and Sign Image Index
206-
uses: stackabletech/actions/publish-image-index-manifest@6a84fcfccf4ee37d85217407bc6a94742afbb45f # v0.14.2
216+
- name: Publish and Sign Image Index to oci.stackable.tech
217+
uses: stackabletech/actions/publish-image-index-manifest@a14cbd08d9e034e2361ea9205b32aff0491885db # v0.15.0
207218
with:
208219
image-registry-uri: oci.stackable.tech
209220
image-registry-username: robot$sdp+github-action-build
210221
image-registry-password: ${{ secrets.HARBOR_ROBOT_SDP_GITHUB_ACTION_BUILD_SECRET }}
211222
image-repository: sdp/${{ env.OPERATOR_NAME }}
212223
image-index-manifest-tag: ${{ needs.build-container-image.outputs.operator-version }}
213224

225+
- name: Publish and Sign Image Index to quay.io
226+
uses: stackabletech/actions/publish-image-index-manifest@a14cbd08d9e034e2361ea9205b32aff0491885db # v0.15.0
227+
with:
228+
image-registry-uri: quay.io
229+
image-registry-username: stackable+robot_sdp_github_action_build
230+
image-registry-password: ${{ secrets.QUAY_ROBOT_SDP_GITHUB_ACTION_BUILD_SECRET }}
231+
image-repository: stackable/sdp/${{ env.OPERATOR_NAME }}
232+
image-index-manifest-tag: ${{ needs.build-container-image.outputs.operator-version }}
233+
214234
publish-helm-chart:
215235
name: Package/Publish ${{ needs.build-container-image.outputs.operator-version }} Helm Chart
216236
if: |
@@ -229,8 +249,8 @@ jobs:
229249
persist-credentials: false
230250
submodules: recursive
231251

232-
- name: Package, Publish, and Sign Helm Chart
233-
uses: stackabletech/actions/publish-helm-chart@6a84fcfccf4ee37d85217407bc6a94742afbb45f # v0.14.2
252+
- name: Package, Publish, and Sign Helm Chart to oci.stackable.tech
253+
uses: stackabletech/actions/publish-helm-chart@a14cbd08d9e034e2361ea9205b32aff0491885db # v0.15.0
234254
with:
235255
chart-registry-uri: oci.stackable.tech
236256
chart-registry-username: robot$sdp-charts+github-action-build
@@ -241,6 +261,19 @@ jobs:
241261
app-version: ${{ needs.build-container-image.outputs.operator-version }}
242262
publish-and-sign: ${{ !github.event.pull_request.head.repo.fork }}
243263

264+
- name: Package, Publish, and Sign Helm Chart to quay.io
265+
uses: stackabletech/actions/publish-helm-chart@a14cbd08d9e034e2361ea9205b32aff0491885db # v0.15.0
266+
with:
267+
chart-registry-uri: quay.io
268+
chart-registry-username: stackable+robot_sdp_charts_github_action_build
269+
chart-registry-password: ${{ secrets.QUAY_ROBOT_SDP_CHARTS_GITHUB_ACTION_BUILD_SECRET }}
270+
chart-repository: stackable/sdp-charts
271+
chart-directory: deploy/helm/${{ env.OPERATOR_NAME }}
272+
chart-version: ${{ needs.build-container-image.outputs.operator-version }}
273+
app-version: ${{ needs.build-container-image.outputs.operator-version }}
274+
publish-and-sign: ${{ !github.event.pull_request.head.repo.fork }}
275+
helm-version: v3.17.4 # This is currently the latest version which supports pushing to quay.io
276+
244277
openshift-preflight-check:
245278
name: Run OpenShift Preflight Check for ${{ needs.build-container-image.outputs.operator-version }}-${{ matrix.arch }}
246279
if: |
@@ -259,12 +292,18 @@ jobs:
259292
- arm64
260293
runs-on: ubuntu-latest
261294
steps:
262-
- name: Run OpenShift Preflight Check
263-
uses: stackabletech/actions/run-openshift-preflight@6a84fcfccf4ee37d85217407bc6a94742afbb45f # v0.14.2
295+
- name: Run OpenShift Preflight Check for oci.stackable.tech
296+
uses: stackabletech/actions/run-openshift-preflight@a14cbd08d9e034e2361ea9205b32aff0491885db # v0.15.0
264297
with:
265298
image-index-uri: oci.stackable.tech/sdp/${{ env.OPERATOR_NAME }}:${{ needs.build-container-image.outputs.operator-version }}
266299
image-architecture: ${{ matrix.arch }}
267300

301+
- name: Run OpenShift Preflight Check for quay.io
302+
uses: stackabletech/actions/run-openshift-preflight@a14cbd08d9e034e2361ea9205b32aff0491885db # v0.15.0
303+
with:
304+
image-index-uri: quay.io/stackable/sdp/${{ env.OPERATOR_NAME }}:${{ needs.build-container-image.outputs.operator-version }}
305+
image-architecture: ${{ matrix.arch }}
306+
268307
# This job is a required check in GitHub Settings for this repository.
269308
# It saves us having to list many required jobs, or work around dynamically
270309
# named jobs (since there is no concept of required settings).
@@ -300,7 +339,7 @@ jobs:
300339
persist-credentials: false
301340

302341
- name: Send Notification
303-
uses: stackabletech/actions/send-slack-notification@6a84fcfccf4ee37d85217407bc6a94742afbb45f # v0.14.2
342+
uses: stackabletech/actions/send-slack-notification@a14cbd08d9e034e2361ea9205b32aff0491885db # v0.15.0
304343
with:
305344
publish-helm-chart-result: ${{ needs.publish-helm-chart.result }}
306345
publish-manifests-result: ${{ needs.publish-index-manifest.result }}

.github/workflows/integration-test.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ jobs:
4141
# TODO: Enable the scheduled runs which hard-code what profile to use
4242
- name: Run Integration Test
4343
id: test
44-
uses: stackabletech/actions/run-integration-test@6a84fcfccf4ee37d85217407bc6a94742afbb45f # v0.14.2
44+
uses: stackabletech/actions/run-integration-test@a14cbd08d9e034e2361ea9205b32aff0491885db # v0.15.0
4545
with:
4646
replicated-api-token: ${{ secrets.REPLICATED_API_TOKEN }}
4747
test-mode-input: ${{ inputs.test-mode-input }}
@@ -51,7 +51,7 @@ jobs:
5151

5252
- name: Send Notification
5353
if: ${{ failure() || github.run_attempt > 1 }}
54-
uses: stackabletech/actions/send-slack-notification@6a84fcfccf4ee37d85217407bc6a94742afbb45f # v0.14.2
54+
uses: stackabletech/actions/send-slack-notification@a14cbd08d9e034e2361ea9205b32aff0491885db # v0.15.0
5555
with:
5656
slack-token: ${{ secrets.SLACK_INTEGRATION_TEST_TOKEN }}
5757
failed-tests: ${{ steps.test.outputs.failed-tests }}
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
name: pre-commit
2+
name: prek
33

44
on:
55
pull_request:
@@ -14,7 +14,7 @@ env:
1414
JINJA2_CLI_VERSION: "1.0.0"
1515

1616
jobs:
17-
pre-commit:
17+
prek:
1818
runs-on: ubuntu-latest
1919
steps:
2020
- name: Install host dependencies
@@ -27,7 +27,7 @@ jobs:
2727
persist-credentials: false
2828
submodules: recursive
2929
fetch-depth: 0
30-
- uses: stackabletech/actions/run-pre-commit@6a84fcfccf4ee37d85217407bc6a94742afbb45f # v0.14.2
30+
- uses: stackabletech/actions/run-prek@a14cbd08d9e034e2361ea9205b32aff0491885db # v0.15.0
3131
with:
3232
python-version: ${{ env.PYTHON_VERSION }}
3333
rust: ${{ env.RUST_TOOLCHAIN_VERSION }}
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).

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,18 @@ All notable changes to this project will be documented in this file.
2424
- Bump `stackable-operator` to 0.110.1 ([#679]).
2525
- Internal operator refactoring: introduce dereference() and validate() steps in the reconciler for spark application, spark connect and spark history server([#687]).
2626
- test: Bump vector-aggregator to 0.55.0, replace /graphql call with gRPC call ([#689]).
27+
- Fix the `SparkApplication` CRD description, which incorrectly described it as a "Spark cluster stacklet" rather than a Spark application ([#705]).
28+
- BREAKING: make application templates namespaced instead of cluster wide objects ([#694]).
2729

2830
[#674]: https://github.com/stackabletech/spark-k8s-operator/pull/674
2931
[#679]: https://github.com/stackabletech/spark-k8s-operator/pull/679
3032
[#680]: https://github.com/stackabletech/spark-k8s-operator/pull/680
3133
[#684]: https://github.com/stackabletech/spark-k8s-operator/pull/684
3234
[#687]: https://github.com/stackabletech/spark-k8s-operator/pull/687
3335
[#689]: https://github.com/stackabletech/spark-k8s-operator/pull/689
36+
[#694]: https://github.com/stackabletech/spark-k8s-operator/pull/694
3437
[#696]: https://github.com/stackabletech/spark-k8s-operator/pull/696
38+
[#705]: https://github.com/stackabletech/spark-k8s-operator/pull/705
3539

3640
## [26.3.0] - 2026-03-16
3741

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
This is a Kubernetes operator to manage [Apache Spark](https://spark.apache.org/) jobs.
1616

1717
<!-- markdownlint-disable MD041 MD051 -->
18-
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).
18+
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).
1919

2020
## Installation
2121

deny.toml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,25 @@ ignore = [
4545
# This version is pulled in transitively via num-bigint-dig -> rsa -> stackable-certs and cannot be
4646
# updated until the upstream rsa crate bumps its rand dependency.
4747
"RUSTSEC-2026-0097",
48+
49+
# https://rustsec.org/advisories/RUSTSEC-2026-0173
50+
# The author of `proc-macro-error2` has [confirmed](https://github.com/GnomedDev/proc-macro-error-2/issues/17#issuecomment-4643215473)
51+
# that the crate is no longer maintained and recommends that users migrate away from it.
52+
#
53+
# There currently is no way for us to negate this advisory, because that crate is not used
54+
# directly by us. We need to wait for new versions of oci-spec and getset. See the following
55+
# issue which tracks moving to a newer getset version: https://github.com/youki-dev/oci-spec-rs/issues/340
56+
#
57+
# proc-macro-error2 v2.0.1
58+
# └── getset v0.1.6
59+
# └── oci-spec v0.9.0
60+
# └── boil v0.2.1
61+
#
62+
# Alternate crates are:
63+
#
64+
# - https://crates.io/crates/manyhow
65+
# - https://github.com/SergioBenitez/proc-macro2-diagnostics
66+
"RUSTSEC-2026-0173",
4867
]
4968

5069
[bans]
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
# Values overlay for chart packages published to quay.io.
3+
image:
4+
repository: quay.io/stackable/sdp

docs/modules/spark-k8s/pages/usage-guide/app_templates.adoc

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,23 @@ Spark application templates are used to define reusable configurations for Spark
55
When you have many applications with similar configurations, templates can help you avoid duplication by grouping common settings together.
66
Application templates are available for the `v1alpha1` version of the SparkApplication custom resource and share the exact same structure as the SparkApplication resource, but with some differences in the way the operator handles them:
77

8-
1. Application templates are cluster wide resources, while Spark application resources are namespace-scoped.
9-
This means that application templates can be used across multiple namespaces, while Spark application resources are limited to the namespace they are created in.
8+
1. Application templates are namespace-scoped resources, just like Spark applications.
9+
This means that a SparkApplication can only reference templates from its own namespace.
1010
2. Application templates are not reconciled by the operator, but must be referenced from a SparkApplication resource to be applied. This means that changes to an application template will not automatically trigger updates to SparkApplication resources that reference it.
1111
3. An application can reference multiple application templates, and the settings from these templates will be merged together. The merging order of the templates is indicated by their index in the reference list. The application fields have the highest precedence and will override any conflicting settings from the templates. This allows you to have a base template with common settings and then override specific settings in the application resource as needed.
1212
4. Application template references are immutable in the sense that once applied to an application they cannot be changed again. Currently templates are applied upon the creation of the application, and any changes to the template references after that will be ignored.
1313
5. Application and template CRDs must have the exact same versions. Currently only `v1alpha1` is supported.
1414
15+
== Migrating from cluster-scoped templates
16+
17+
IMPORTANT: Application templates used to be cluster wide resources when they were first released. This was a mistake. Many users do not have the access rights to create cluster scoped resources and so the templates are now namespace scoped.
18+
19+
If you are migrating from older installations where templates were treated as cluster-wide resources, account for the following:
20+
21+
1. Recreate each template in every namespace where SparkApplications use it.
22+
2. Keep template names consistent per namespace if you want the same application annotations to continue working.
23+
3. Cross-namespace template references are no longer resolved; templates and applications must be in the same namespace.
24+
4. Update GitOps/automation manifests to create templates as namespace-targeted resources before reconciling dependent SparkApplications.
1525
== Examples
1626

1727
Applications use `metadata.annotations` to reference application templates as shown below:

extra/crds.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ spec:
2222
properties:
2323
spec:
2424
description: |-
25-
A Spark cluster stacklet. This resource is managed by the Stackable operator for Apache Spark.
25+
A Spark application run on Kubernetes by the Stackable operator for Apache Spark.
2626
Find more information on how to use it and the resources that the operator generates in the
2727
[operator documentation](https://docs.stackable.tech/home/nightly/spark-k8s/).
2828
@@ -4639,7 +4639,7 @@ spec:
46394639
shortNames:
46404640
- sparkapptemplate
46414641
singular: sparkapplicationtemplate
4642-
scope: Cluster
4642+
scope: Namespaced
46434643
versions:
46444644
- additionalPrinterColumns: []
46454645
name: v1alpha1

0 commit comments

Comments
 (0)